Powershell: рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдЪ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЕрдЧре░ 2016  ┬╖  170рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: PowerShell/PowerShell

рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛

  1. рдПрдХ рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо native.exe рд▓рд┐рдЦреЗрдВ рдЬреЛ ARGV рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд░рддрд╛ рд╣реИ
  2. native.exe "`"a`"" рдЪрд▓рд╛рдПрдБ

    рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

ARGV [1] == "a"

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

ARGV [1] == a

рдкрд░реНрдпрд╛рд╡рд░рдг рдбреЗрдЯрд╛

рд╡рд┐рдВрдбреЛрдЬ 10 x64

Name                           Value
----                           -----
PSVersion                      5.1.14393.0
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.0
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
Committee-Reviewed WG-Engine

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддрд░реНрдХ рджреЗрдирд╛ рд╣реИред рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП system() рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирдП рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ Matlab рдХреА рддрд░рд╣ calc.exe рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдЕрдВрдХрдЧрдгрд┐рдд рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • Pwsh рдЯреАрдо рдПрдХ рдирдП рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рддреА рд╣реИ рдЬреЛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╕рд╛рдорд╛рди рдХреЛ рдареАрдХ рдХрд░рддреА рд╣реИ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд cmdlet рдХреЗ рдкреАрдЫреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреА рд╣реИред
  • рд╕реНрдЯреЙрдк-рдЧреИрдк рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЧрд╛рдореА pwsh рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд cmdlet рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд╛рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирдП, рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╡рд╣реА Start-Process рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ -QuotingBehavior Legacy ... рдЬреИрд╕реЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде "рдирдП" cmdlet рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред) # 13089 рджреЗрдЦреЗрдВред

рд╕рднреА 170 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ "\"a\"" рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ? рдкрд╛рд╡рд░рд╢реЗрд▓ рдПрд╕реНрдХреЗрдк рдХреА рдореЗрд░реА рд╕рдордЭ рдпрд╣ рдХрд╣рддреА рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред " " "" рдПрдХ a рдЖрд╕рдкрд╛рд╕ рдЙрджреНрдзрд░рдгреЛрдВ рдХреА рдПрдХ рдмрдЪреА рд╣реБрдИ рдЬреЛрдбрд╝реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ, рдЗрд╕рд▓рд┐рдП PowerShell рдмрд╛рд╣рд░реА рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЬреЛрдбрд╝реА рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣" рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рд╣реИ "рдФрд░ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдлрд┐рд░ рдмрдЪреА рд╣реБрдИ рдЬреЛрдбрд╝реА рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрдЪ рдЧрдП рдЙрджреНрдзрд░рдг рдХреЗ рд╕рд╛рде рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЖрдкрдХреЛ "a" рд╕рд╛рде рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ \ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рд╢ рдПрдХ рдмрдЪ рдЪрд░рд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ \ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред PowerShell рдореЗрдВ, рдПрд╕реНрдХреЗрдк рдЪрд░рд┐рддреНрд░ рдПрдХ рдмреИрдХрдЯрд┐рдХ рд╣реИред PowerShell рдПрд╕реНрдХреЗрдк рд╡рд░реНрдг рджреЗрдЦреЗрдВред

рдпрджрд┐ рдЖрдк рд╕рдЪрдореБрдЪ "\"a\"" рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

> echo `"\`"a\`"`"
"\"a\""

@andschwa
рд╣рд╛рдВ, рдЖрдВрддрд░рд┐рдХ cmdlets рдХреЗ рд▓рд┐рдП рдПрд╕реНрдХреЗрдк рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЗрд╢реА рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдкрд░ рдЪреАрдЬреЗрдВ рдЕрдЬреАрдм рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ред
native.exe " " "" рдЪрд▓рдиреЗ рдкрд░, ARGV [1] рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

"a"

(рддреАрди рдЕрдХреНрд╖рд░)

рдХреЗ рдмрдЬрд╛рдп

a

(рдПрдХ рд╡рд░реНрдг)ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ native.exe рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджреЛ рдЙрджреНрдзрд░рдгреЛрдВ рдФрд░ a рд╡рд░реНрдг рдХреЗ рд╕рд╛рде ARGV рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдЕрдЬреАрдм рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

native.exe "\`"a\`""

рдУрд╣ рд╕рдордЭрд╛ред рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗред

рдПрдХ рдордЬрдмреВрдд рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ, рдпрджрд┐ рдЖрдк # 1639 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

@ndchwa рд╡рд╣реАред рдЖрдкрдХреЗ рдкрд╛рд╕ PowerShell рдФрд░ CommandLineToArgvW рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрддреГрдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрдмрд▓-рдПрд╕реНрдХреЗрдкреЗ рд╣реИред рдпрд╣ рд░реЗрдЦрд╛:

native.exe "`"a`""

cmd рдХреЗ рд▓рд┐рдП рдПрдХ StartProcess рдмрд░рд╛рдмрд░ рд╣реИ

native.exe ""a""

@ be5invis @douglaswth рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ https://github.com/PowerShell/PowerShell/pull/2182?

рдирд╣реАрдВ, рд╣рдо рдЕрднреА рднреА рдПрдХ backtick-escaped рдбрдмрд▓ рдЙрджреНрдзрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмреИрдХрд╕реНрд▓реИрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рдбрдмрд▓-рднрд╛рдЧрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред (рдЕрд░реНрдерд╛рддреН, рд╣рдореЗрдВ PowerShell рдФрд░ CommandLineToArgvWW рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ред)

рдЪреВрдБрдХрд┐ " " "" '"a"' рдмрд░рд╛рдмрд░ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ native.exe '"a"' рдХрд╛ рдкрд░рд┐рдгрд╛рдо "\"a\"" рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рджреЛрд╣рд░реА рдмрдЪрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЪрд░рдо рджреЗрдЦрднрд╛рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@ рд╣реЙрд░реНрд╕ рд╣рд╛рдБред
@douglaswth рдбрдмрд▓-

@vors @douglaswth
рдпрд╣ рдПрдХ C рдХреЛрдб рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ GetCommandLineW рдФрд░ CommandLineToArgvW рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

#include <stdio.h>
#include <wchar.h>
#include <Windows.h>

int main() {
  LPWSTR cmdline = GetCommandLineW();
  wprintf(L"Command Line : %s\n", cmdline);

  int nArgs;
  LPWSTR *szArglist = CommandLineToArgvW(cmdline, &nArgs);
  if (NULL == szArglist) {
    wprintf(L"CommandLineToArgvW failed\n");
    return 0;
  } else {
    for (int i = 0; i < nArgs; i++) {
      wprintf(L"argv[%d]: %s\n", i, szArglist[i]);
    }
  }
  LocalFree(szArglist);
}

рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ

$ ./a "a b"
Command Line : "Z:\playground\ps-cmdline\a.exe" "a b"
argv[0]: Z:\playground\ps-cmdline\a.exe
argv[1]: a b

$ ./a 'a b'
Command Line : "Z:\playground\ps-cmdline\a.exe" "a b"
argv[0]: Z:\playground\ps-cmdline\a.exe
argv[1]: a b

$ ./a 'a"b'
Command Line : "Z:\playground\ps-cmdline\a.exe" a"b
argv[0]: Z:\playground\ps-cmdline\a.exe
argv[1]: ab

$ ./a 'a"b"c'
Command Line : "Z:\playground\ps-cmdline\a.exe" a"b"c
argv[0]: Z:\playground\ps-cmdline\a.exe
argv[1]: abc

$ ./a 'a\"b\"c'
Command Line : "Z:\playground\ps-cmdline\a.exe" a\"b\"c
argv[0]: Z:\playground\ps-cmdline\a.exe
argv[1]: a"b"c

@ be5invis рдореИрдВ

рд╡реЗ рдХрд┐рддрдиреЗ рд╣реИрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреЛрд╣рд░реЗ-рдЙрджреНрдзрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЦрдХ рдЬрд╛рдирддреЗ рд╣реИрдВред рдпрд╣ рдмрдЧ рд╣реИ, рдлрд╝реАрдЪрд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред

???? рдЖрдИ - рдлрд╝реЛрди

? 2016 9 21 ?? 01?? 58 рдбрдЧрд▓рд╕ рдмрдЪрдд < [email protected] [email protected] > ???

@ be5i nvishttps: //github.com/be5invis рдореИрдВ

рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕реАрдзреЗ рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ Gi tHubhttps: //github.com/PowerShell/PowerShell/issues/1995#issuecomment -248381045 рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ thhhttps: //github.com/notifications/unsubscribe-auth/AAOpnf_f0f0m05Um05_mf рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

PowerShell рдХреЛ рд▓рдЧрднрдЧ 9 рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдБ рд╕реЗ рдмрд╛рд╣рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЕрдЪреНрдЫреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдореБрдЭреЗ рд╕реНрдЯреИрдХрдСрд╡рд░рдлреНрд▓реЛ рдФрд░ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбрдмрд▓ рднрд╛рдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА рдЬрдм рдореИрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕рдХреЗ рджрд╛рд╡реЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИ ред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
PowerShell рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдкреЙрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .NET API рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ Win32 API (рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ, PS StartProcessInfo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/engine/NativeCommandProcessor.cs#L1063

рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдПрдкреАрдЖрдИ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкреБрди: рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреБрди: рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ PowerShell рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ Win32 рдПрдкреАрдЖрдИ рд╣реИ (рдФрд░ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдбреЙрдЯрдиреЗрдЯ рдХреЛрд░ рдФрд░ рдпреВрдирд┐рдХреНрд╕ рдирд┐рдпрдореЛрдВ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд╣реИ)ред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдиреБрдмрдВрдз \ рдФрд░ " рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, PowerShell рдЪрд╛рд▓рд╛рдХ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ cmd рдФрд░ bash рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ: рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдореВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд▓рд╛рдЗрди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреЙрд▓реАрд╢реЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

@ be5invis рдпрджрд┐ рдЖрдк рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд░реЗрдВред рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ https://github.com/PowerShell/PowerShell/blob/master/docs/dev-process/breaking-change-contract.md рдореЗрдВ рд╡рд░реНрдгрд┐рдд RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдпрд╛ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╕рдордп, рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рдХреЛ рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд▓рд┐рдирдХреНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдПрдХ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╢рдХреНрддрд┐рдпрд╛рдВ рдореЗрдВ рддрд░реНрдХ рд╕рдорд╛рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рднреА, рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрд╕рдВрдЧрдд рд╣реИ:
рдпрджрд┐ рдХрд┐рд╕реА рддрд░реНрдХ рдореЗрдВ рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдХрд┐рд╕реА рддрд░реНрдХ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рдпрджрд┐ рдпрд╣ рдЙрджреНрдзрд░рдгреЛрдВ рд╕реЗ рдШрд┐рд░рд╛ рд╣реЛрдЧрд╛, рддреЛ рдЗрд╕реЗ CommandLineToArgvW рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред => CommandLineToArgvW рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рддрд░реНрдХ рдореЗрдВ рдЙрджреНрдзрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рд╡реЗ рдмрдЪ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред => рддрд░реНрдХ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ CommandLineToArgvW рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЛ рдпрд╛ рддреЛ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╣рдореЗрд╢рд╛ CommandLineToArgvW рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЖрдзреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВред

рдЕрдиреБрдмрдВрдз рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдбрдмрд▓ рднрд╛рдЧрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдореИрдВ рдЗрд╕реЗ "рдмрдХреЗрдЯ 2: рд░реАрдЬрдиреЗрдмрд▓ рдЧреНрд░реЗ рдПрд░рд┐рдпрд╛" рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╛ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ?

@vors рдпрд╣ рдмреЗрд╣рдж рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рддрд░реНрдХ рдПрдХ рдЪрд░ рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ: рдЖрдкрдХреЛ рдЗрд╕реЗ рдореВрд▓ рдРрдк рдореЗрдВ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ "рдСрдЯреЛ-рдПрд╕реНрдХреЗрдк" рдСрдкрд░реЗрдЯрд░ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ ^"a " " -> "a\ " ""

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @TSlivede рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╕рд╣реА рд░рдЦрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рддрд░реНрдХреЛрдВ рдХреЛ рдХрднреА рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╣рдореЗрд╢рд╛ рдХрдорд╛рдВрдбрд▓рд╛рдЗрдирдЯреЙрдпрд░рдЧрд░реНрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЖрдзреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВред

рдореИрдВ рдмрд╛рд▓реНрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ "рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯреВрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡" рдмрд╛рд▓реНрдЯреА рдХреЛ рд╕рдВрднрд╡рддрдГ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо PowerShell рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рд╣рдорд╛рд░реА рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╣рд╛рди рд╕рдореБрджрд╛рдп рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдо рдЖрдо рд╕рд╣рдорддрд┐ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдЖрд░рдПрдлрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .net рдХреЗ рдмрдЬрд╛рдп P / Invoke рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд╣ рддрд░реНрдХ рд╕реЗ рдЙрджреНрдзрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП PowerShell рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЯрд╛рд▓рддрд╛ рд╣реИред

@lzybkr рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, PInvoke рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдпреВрдирд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬрд╝ рдПрдкреАрдЖрдИ рдЕрд▓рдЧ рд╣реИрдВ:

https://msdn.microsoft.com/en-us/library/20y988d2.aspx (рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдорд╛рдирддреЗ рд╣реИрдВ)
https://linux.die.net/man/3/execvp (рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЗрд▓рд╛рдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)

рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ рдпрд╣рд╛рдБ рдордВрдЪ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рддрд░реАрдХреЗ рд╕реЗ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдЪрд░ рдХреЗ рд╕рд╛рдеред рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреВрдХ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдмрд╛рд╣рд░реА рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдХреБрдЫ рднреА рдордВрдЪ рдкрд░ рдирд┐рд░реНрднрд░ред

рдЦреИрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рдордВрдЪ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХреЗ рдкрд╛рд╕ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВред рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рддрд░реНрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ рдЬрдмрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди (рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдорд┐рд▓рддреА рд╣реИред
(рдЕрдзрд┐рдХ рдмреБрдирд┐рдпрд╛рджреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
CreateProcess -> рдХрдорд╛рдВрдбрд▓рд╛рдЗрди (https://msdn.microsoft.com/library/windows/desktop/ms682425)
рддрдерд╛
execve -> рдХрдорд╛рдВрдб рдПрд░реЗ (https://linux.die.net/man/2/execve)
)

рдЬреИрд╕рд╛ рдХрд┐ рдкреЙрд╡рд░рд╢реЗрд▓ рдЙрди рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрдм рддрд░реНрдХреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рд╕реНрдерд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ рдкреЙрд╡рд░рд╢реЗрд▓ рдПрдХ рддрд░рд╣ рд╕реЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ** рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдХрд┐ CommandLineToArgvW рддрд░реНрдХреЛрдВ рдХреЛ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╢рдХреНрддрд┐рдпрд╛рдВ рдореЗрдВ рджрд┐рдП рдЧрдП рдереЗред (рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реА-рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдкрдиреЗ argv рдПрд░реЗ рдореЗрдВ рдЙрддрдиреЗ рд╣реА рддрд░реНрдХ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рддрдиреЗ рдореЗрдВ рдкреЙрд╡рд░рд╢реЗрд▓ рдлрдВрдХреНрд╢рди рдХреЛ $ args рдорд┐рд▓рддрд╛ рд╣реИред)
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рд░реНрдл linux systemcall (рдЬреИрд╕рд╛ рдХрд┐ p / invoke рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

** (рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ)

рдкреБрдирд╢реНрдЪ: RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?

рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ - PowerShell рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ CommandLineToArgvW рд╕рд╣реА рдХрдорд╛рдВрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗ рдФрд░ _After_ рдкреЙрд╡рд░рд╢реЗрд▓ рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рдкрд╛рд░реНрд╕ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдЙрд╕реЗ рд░рд┐рдкреНрд░реЗрдЬреЗрдВрдЯ рдХрд░реЗред

рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рджрд░реНрдж рдмрд┐рдВрджреБ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЙрд╕ рдХрдард┐рдирд╛рдИ рдХреЛ * nix рдкрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдг рджреЗрдЦрддрд╛ рд╣реВрдВред

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд░рдПрдлрд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдордиреЗ Windows PowerShell рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ RFC рдХреЛ рд╡рд╛рд░рдВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╕рд╣реА рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдПрдХ (рд╕рдВрднрд╡рддрдГ рдЬреЛрдЦрд┐рдо рднрд░рд╛) рдмрдЧ рдлрд┐рдХреНрд╕ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ рдбрд╛рдпрд░реЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдмрджрд▓рдиреЗ рд╕реЗ рд╕рднреА рдХреЛ рдЕрдзрд┐рдХ рдЦреБрд╢реА рдорд╣рд╕реВрд╕ рд╣реЛрдЧреАред

рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рднреА рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП,
(рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реАрдпрддрд╛ рдЪрд░ рдЬреЛрдбрд╝рдХрд░)
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рдЧрд▓рдд рд╣реИ - рдпрд╣ рдПрдХ рдмрдЧ рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ syscall рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рддрд░реНрдХ рдЕрдЧрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдХреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, CommandLineToArgvW рд▓рд┐рдП рдЕрд╕рдВрдЧрдд, рдореБрдЭреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ @ be5invis рдкрд╕рдВрдж рд╣реИ - рд▓реЗрдХрд┐рди рдореИрдВ рдСрдЯреЛ-рдПрд╕реНрдХреЗрдк рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ

рдпрд╣ рдореБрджреНрджрд╛ рдЕрднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рддрдм рдЖрдпрд╛ рдерд╛ рдЬрдм рдХрд┐рд╕реА рдиреЗ PowerShell рдореЗрдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдФрд░ рдЬрдм рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рддрдм PowerShell рдХреЛ рд╡рд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди CMP рдиреЗ рдХрд┐рдпрд╛:

wmic useraccount where name='username' get sid

PSCX рдЧреВрдВрдЬ рд╕реЗ, wmic.exe рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реИ:

94> echoargs wmic useraccount where name='tso_bldadm' get sid
Arg 0 is <wmic>
Arg 1 is <useraccount>
Arg 2 is <where>
Arg 3 is <name=tso_bldadm>
Arg 4 is <get>
Arg 5 is <sid>

Command line:
"C:\Users\hillr\Documents\WindowsPowerShell\Modules\Pscx\3.2.2\Apps\EchoArgs.exe" wmic useraccount where name=tso_bldadm get sid

рддреЛ рдХреНрдпрд╛ API рд╕реАрдПрдордбреАред Exe рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ / рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдЙрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП% рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?

@rkeithhill CreateProcessW ред рдкреНрд░рддреНрдпрдХреНрд╖ рдХреЙрд▓ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред

рдкреЙрд╡рд░рд╢реЗрд▓ рдЗрди рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реА рд╣реИ? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдбрдмрд▓-рдХреЛрдЯреНрд╕ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╡рд╛рд▓реЗ рдЖрд░реНрдЧреНрд╕ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред

# Desired argv[1] is 4 characters: A, space, double-quote, B
$ .\echoargs.exe 'A \"B'
<"C:\test\echoargs.exe" "A \"B">
<A "B>
# Correct!

# Desired argv value is 4 characters: A, double-quote, space, B
$ .\echoargs.exe 'A\" B'
<"C:\test\echoargs.exe" A\" B>
<A"> <B>
# Wrong...

рд▓рдЧрддрд╛ рд╣реИ рдХреЛрдИ рддреБрдХ рдпрд╛ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдбрдмрд▓-рдХреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЖрд░реНрдЧ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдбрдмрд▓-рдХреЛрдЯреНрд╕ рдореЗрдВ рдХрдм рд▓рдкреЗрдЯрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рдкреЗрдЯ (рдпрд╛ рдирд╣реАрдВ) рдХрд░ рд╕рдХреВрдВред

.echoargs.exe cl echoargs.c рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХрд▓рди рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

// echoargs.c
#include <windows.h>
#include <stdio.h>
int wmain(int argc, WCHAR** argv) {
    wprintf(L"<%ls>\n", GetCommandLineW());
    for(int i = 1; i < argc; i++) {
        wprintf(L">%s< ", argv[i]);
    }
    wprintf(L"\n");
}

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣рд╛рдБ рдореЗрд░рд╛ $ PSVersionTable рд╣реИ:

Name                           Value
----                           -----
PSVersion                      5.1.15063.296
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.15063.296
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрдИ рдмрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛:

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдиреАрдЪреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝реЙрд░реНрдо
рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг:

# call helper

function Run-Native($command) {
    $env:commandlineargumentstring=($args | %{'"'+ ($_ -replace '(\\*)"','$1$1\"' -replace '(\\*)$','$1$1') + '"'}) -join ' ';
    & $command --% %commandlineargumentstring%
}

# some test cases

Run-Native .\echoargs.exe 'A "B' 'A" B'
Run-Native .\echoargs.exe 'A "B'
Run-Native .\echoargs.exe 'A" B'
Run-Native .\echoargs.exe 'A\" B\\" \'

рдЖрдЙрдЯрдкреБрдЯ:

<"C:\test\echoargs.exe"  "A \"B" "A\" B">
<A "B> <A" B>

<"C:\test\echoargs.exe"  "A \"B">
<A "B>

<"C:\test\echoargs.exe"  "A\" B">
<A" B>

<"C:\test\echoargs.exe"  "A\\\" B\\\\\" \\">
<A\" B\\" \>

рдкрд╣рд▓реЗ -replace рдХреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рдордиреЗ рдмреИрдХрд╕реНрд▓реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреИрдХрд╕реНрд▓реИрд╢ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдХреНрдпреВрдЯреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред
рджреВрд╕рд░рд╛ -replace рдмреИрдХрд╕реНрд▓реИрд╢ рдХреЛ рддрд░реНрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рджреЛрдЧреБрдирд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдорд╛рдкрди рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ --% (PS v3 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ AFAIK рдХреЛ рджреЗрд╢реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рд╣реИред


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

Run-Native рдХрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг, рдЕрдм Invoke-NativeCommand (рдЬреИрд╕рд╛ рдХрд┐ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

function Invoke-NativeCommand() {
    $command, [string[]] $argsForExe = $args
    if($argsForExe.Length -eq 0){
        & $command
    } else {
        $env:commandlineargumentstring=($argsForExe | %{
            if($_ -match '^[\w\d\-:/\\=]+$'){
                $_ #don't quote nonempty arguments consisting of only letters, numbers, or one of -:/\=
            } else {
                $_ <# double backslashes in front of quotes and escape quotes with backslash #> `
                    -replace '(\\*)"','$1$1\"' `
                   <# opening quote after xxx= or after /xxx: or at beginning otherwise #> `
                    -replace '^([\w\d]+=(?=.)|[/-][\w\d]+[:=](?=.)|^)','$1"' `
                   <# double backslashes in front of closing quote #> `
                    -replace '(\\*)$','$1$1' `
                   <# add closing quote #> `
                    -replace '$','"'
            }
        }) -join ' ';
        & $command --% %commandlineargumentstring%
    }
}

( iep рд╕реЗ рдХреБрдЫ рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд╕рд╛рде)

  • рд╕рд░рд▓ рд╕реНрд╡рд┐рдЪ рдмреЛрд▓реА рдирд╣реАрдВ рд╣реИ
  • рдЕрднреА рднреА рдЦрд╛рд▓реА рдЖрд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  • рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ
  • рдЬреНрдпрд╛рджрд╛рддрд░ msiexec, cmdkey, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ...
  • рдЕрднреА рднреА рд╣рдореЗрд╢рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ
  • рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рдЧреИрд░рдорд╛рдирдХ "" рдмрдЪ рдЧрдП рдХреЗ рд░реВрдк рдореЗрдВ " - рд╣реЛрдЧрд╛ рдЗрд╕рд▓рд┐рдП рдЕрднреА рднреА рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЙрджреНрдзрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рдирд╣реАрдВ .bat рдпрд╛ msiexec рддрд░реНрдХ

рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ --% рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓реАрдХ рдХрд┐рдП рдмрд┐рдирд╛? (рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)

рдХреНрдпрд╛ рдХреЛрдИ PowerShell рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬреЛ рд╕рднреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП Run-Native Cmdlet рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдЧреИрд▓рд░реА рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдерд╛, рддреЛ рдпрд╣ рдПрдХ рдЖрд░рдПрдлрд╕реА рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

"рд▓реАрдХ" рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рд╡реИрд╕реЗ рднреА рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╡рд┐рдВрдбреЛрдЬ рдкрд░ gwmi win32_process |select name,handle,commandline|Format-Table рдФрд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ ps -f )

рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрдирд╡реЛрдХ-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

RFC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрдорд╛рдВрдбрд▓реЗрдЯ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

https://github.com/PowerShell/PowerShell-RFC/issues/90

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ PowerShell рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рддрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд░реВрдк рд╕реЗ рдпрд╣ рдорд╛рди рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ RFC рдкреБрд░рд╛рдиреЗ рднрд╛рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд░реАрдпрддрд╛ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рдХреЗрд╡рд▓ рд╕рд╣реА рд░рд╛рдп рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рджреЗрдВ:

  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд┐рдЫрдбрд╝рд╛-рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЙрдкрд▓рдмреНрдз рд░рд╣рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

  • @TSlivede рдХрд╛ RFC рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрдм рд╡рд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ __ рдХреА рдУрд░ рдзреНрдпрд╛рдирдкреВрд░реНрд╡рдХ рд╕рдВрдХреЗрдд рджреЗ рд░рд╣рд╛ рд╣реЛред
    рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдирдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд░реВрдк рдореЗрдВ _PR_ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЗрд╕реЗ RFC _draft_ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднреА рддрдХ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


_The future_ рджреНрд╡рд╛рд░рд╛, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ:

  • PowerShell рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдРрд╕рд╛ рд╢реЗрд▓ рд╣реИ рдЬреЛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЕрдкрдирд╛ cmd.exe -рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕рд╛рдорд╛рди рдмрд╣рд╛ рд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрд╛рдд рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ рдХрд┐ рдЬрдм рдпрд╣ рдмрд╛рд╣рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рд╣реЛ (рдирд┐рд╖реНрдкрд╛рджрдХ рдЬреЛ рдХрд┐ (рдЖрдорддреМрд░ рдкрд░) рдХрдВрд╕реЛрд▓ / рдЯрд░реНрдорд┐рдирд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ) :

    • рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ _PowerShell_ рдХреЗ рддрд░реНрдХ-рдореЛрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧ _only_ рдХреЗ рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред

    • рдЬреЛ рднреА _literals_ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд░рд┐рдгрд╛рдо _as-is_ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд▓рдХреНрд╖реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп, рдЬреИрд╕рд╛ рдХрд┐ _indateral_ рддрд░реНрдХреЛрдВред

    • рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рд╕рднреА рдХреЛ рдХрднреА рднреА рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ _PowerShell_ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ PowerShell рдХрд┐рд╕реА рднреА рдкреАрдЫреЗ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рддрд╛ рд╣реИ - рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ - рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред


рднрд╡рд┐рд╖реНрдп рдореЗрдВ _ рд▓рд╛рдЧреВ рдХрд░рдирд╛:

  • _Windows_ рдкрд░:

    • _Historical_ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, Windows _not_ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдкрд╛рд╕рд┐рдВрдЧ рддрд░реНрдХ _as рд╕рд░рдгреА рдХрд╛ рдПрдХ рдЕрдХреНрд╖рд░_ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, _pseudo рд╢реЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ _single_ string рдПрдиреНрдХреЛрдбрд┐рдВрдЧ _all_ рддрд░реНрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рднреА рдмреБрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ_ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд▓рдХреНрд╖реНрдп рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдЗрд╕реЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред

    • рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ PowerShell рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдВрдЧрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ - рджреГрд╢реНрдпреЛрдВ рдХреЗ рдкреАрдЫреЗ, рдЙрд╕рдХреЗ _own_ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХреЛрдВ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж - рдПрдХ _predictable, рдорд╛рдирдХреАрдХреГрдд рддрд░реАрдХреЗ рд╕реЗред

    • @TSlivede рдХрд╛ RFC рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рд┐рд░реНрдл рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐, PowerShell рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ рдЫрджреНрдо рд╢реЗрд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрдирдкреБрдЯ рддрд░реНрдХ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Windows C / C ++ рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛

      • рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ, рдХреЛрдИ _guarantee_ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд╣рд╛ рдХрд┐ рдирд┐рдпрдо рд╕рдмрд╕реЗ рд╕рдордЭрджрд╛рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ _most_ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдЗрди рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред

      • рдХреЗрд╡рд▓ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдкрд╡рд╛рдж _batch files_ рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ RFC рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред

  • _Unix_ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░:

    • рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, Windows рддрд░реНрдХ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЗ _need рдХрднреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдиреЗрдЯрд┐рд╡ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ _ рд╕рд╛рд╣рд┐рддреНрдп рдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИ - рдЬреЛ рднреА рддрд░реНрдХ PowerShell рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХреЗ _own_ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдХреЗрд╡рд▓ _as-is_ рдкрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред ред
      @Lzybkr рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: "рдореБрдЭреЗ рдЙрд╕ рдХрдард┐рдирд╛рдИ рдХреЛ * nix рдкрд░ рд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред"

    • рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ .NET рдХреЛрд░ (CoreFX) рдХреА рд╡рд░реНрддрдорд╛рди рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдпреЗ рдореБрджреНрджреЗ _do_ рдЦреЗрд▓рдиреЗ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ CoreFX API рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ _Windows_ рддрд░реНрдХ рдХреА рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЛ рдпреВрдирд┐рдХреНрд╕ рджреБрдирд┐рдпрд╛ рдкрд░ рднреА рдЧреБрдЬрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЫрджреНрдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпреВрдирд┐рдХреНрд╕ред

    • рдореИрдВрдиреЗ рдЗрд╕ CoreFX рдореБрджреНрджреЗ рдХреЛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИред

    • рдЗрд╕ рдмреАрдЪ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ CoreFX рдЫрджреНрдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╡рд╛рдкрд╕ C / C ++ рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, @TSlivede рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдпреВрдирд┐рдХреНрд╕ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреИрд╕рд╛ рдХрд┐ https://github.com/PowerShell/PowerShell/issues/4358 рдХреЛ рдЗрд╕ рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣рд╛рдБ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рд╣реИ:

рдпрджрд┐ рдЕрдиреБрдЧрд╛рдореА рдмреИрдХрд╕реНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рдПрдХ рддрд░реНрдХ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рднреЛрд▓реА рд╣реИ (рддрд░реНрдХ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрджреНрдзрд░рдг рдЬреЛрдбрд╝реЗрдВ)ред рдХреЛрдИ рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди
@ Mklement0 рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ :

рджреВрд╕рд░рд╛ " ".\test 2\" , рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг \ _ рдХреЛ рдПрдХ рдкрд▓рд╛рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ", рдЬрд┐рд╕рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╢реЗрд╖ рдмрдЪ рдЬрд╛рддрд╛ рд╣реИ - рдлрд┐рд░ рдПрдХ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж" рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдПрдХ рд╣реА рддрд░реНрдХред

рдЙрджрд╛рд╣рд░рдг:
( @akervinen рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ )

PS X:\scratch> .\ps-args-test.exe '.\test 2\'
рдкреНрд░рд╛рдкреНрдд рддрд░реНрдХ: .\test 2"

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрд╣реБрдд рдмрд╛рд░ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ PSReadLine рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдкреАрдЫреЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдХрджрдо рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ Corefx рдХреЛ рдПрдкреАрдЖрдИ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрддреНрдкрд╛рджрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред 6.0.0 рдХреЗ рд▓рд┐рдП, рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо # 4358 рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

@TSlivede рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдпрд╛, рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ Invoke-NativeCommand ( Run рдореЗрдВ рдПрдХ рдорд╛рдиреНрдп рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ) рдФрд░ рдПрдХ рдЙрдкрдирд╛рдо ^ рдЬреЛрдбрд╝рд╛ рдФрд░ рдЗрд╕реЗ PowerShellGallery рдкрд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛:

install-module NativeCommand -scope currentuser
^ ./echoargs 'A "B' 'A" B'

@ SteveL-MSFT:

рдПрдХ рд╕реНрдЯреЙрдкрдЧреИрдк рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдХрдо рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛ - рдЬрдм рд╣рдо рдПрдХ CoreFX рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджреНрдзрд░рдг / рддрд░реНрдХ-рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @TSlivede рдХреЗ RFC рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд░реВрдк рд╕реЗ рдЦреБрдж рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ - рдЬреЛ doesn 'рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ \" рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рддрд░реНрдХ рдЕрднреА рднреА рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕реЗ рд╕рд░рд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рднреА:

PS> bash -c 'echo "hi there"'
hi    # !! Bash sees the following tokens:  '-c', 'echo hi', 'there'

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордЭреМрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдЖрд░рдПрдлрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ, рдХреНрдпрд╛ рд╣рдо?

рдПрдХрдорд╛рддреНрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдирд┐рд░реНрдгрдп рдпрд╣ рд╣реИ рдХрд┐ _Windows_ рдореЗрдВ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред

@ mklement0 @ рд╕реНрдЯреАрд╡рдПрд▓-рдПрдордПрд╕рдПрдлрдЯреА
рдХреНрдпрд╛ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд╕рдВрдЧрддрддрд╛ рддреЛрдбрд╝

рдПрдХрдорд╛рддреНрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдирд┐рд░реНрдгрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд╣реИ рдирд╛?

@ be5invis "рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреВрдЯреА рд╣реБрдИ рд╕рдВрдЧрддрддрд╛" рд╕реЗ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ CoreFX рдЕрдкрдиреА рдкрд░рдд рдореЗрдВ рдПрдХ рд╕реБрдзрд╛рд░ рдХреЗ рдХрдЧрд╛рд░ рдкрд░ рд╣реИ, рддреЛ рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реА рдкрд░рдд рдореЗрдВ рд╕реНрдЯреЙрдкрдЧреИрдк рдирд╣реАрдВ рдмрдирд╛рдКрдВрдЧрд╛ред

рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдереНрд░реЗрдб рдореЗрдВ рдКрдкрд░ рдХрд╣рд╛ рд╣реИ, рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдореБрджрд╛рдп рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рджреЛ рд░рд┐рд▓реАрдЬ рдореЗрдВ рджреЛ рдмрд╛рд░ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

@joeyaiello :

# 4358 рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдВрддрд┐рдо \ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ; рдЬреИрд╕реЗ, "c:\tmp 1\\" ? рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: рдпрджрд┐ рдЖрдк рдЗрд╕ рдлрд┐рдХреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ _two_ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ: рдпрд╣ рдПрдХ рдЕрдм, рдФрд░ рдмрд╛рдж рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ CoreFx API рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж; рдФрд░ рдЬрдмрдХрд┐ _could_ рднреА рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкреВрд░реНрдг рд╕реНрдЯреЙрдкрдЧреИрдк рдЕрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЗрд╕ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдЧреЛрдж рд▓реЗрдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрдзрд░рдг рдкрд░рд┐рджреГрд╢реНрдп рдЬреИрд╕реЗ
bash -c 'echo "hi there"' рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ред

@ рдкреЙрд╡рд░рд╢реЗрд▓ / рдкреЙрд╡рд░рд╢реЗрд▓-рдХрдореЗрдЯреА рдиреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рд╣рдорддрд┐ рд╡реНрдпрдХреНрдд рдХреА рдХрд┐ рдиреНрдпреВрдирддрдо --% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрддрд╛рд╡рд▓рд╛рдкрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪ рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рджреЗрд╢реА рдХрдорд╛рдВрдб рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛред рдмрд╣рд╕ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ --% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ w / o рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдзреНрдпрд╛рди рджреЗрдВ:

  • рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ _Unix_ рдкрд░ --% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЗрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢реЗрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ _emulate_ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ _Windows_ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛, рдХрдИ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреБрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

  • рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдкреНрд░рд╢реНрди рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП: рдЬрдмрдХрд┐ bash рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рд╣реИ, рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ POSIX-compliant рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА POSIX рджреНрд╡рд╛рд░рд╛ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ /bin/sh , POSIX рджреНрд╡рд╛рд░рд╛ рд╢реЗрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдбрд┐рдХреЛрдб (рдЬреЛ _can_ рд╕рдВрдЧрддрддрд╛ рдореЛрдб рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ macOS рдкрд░), рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ (рдЬреИрд╕реЗ, Ubuntu рдкрд░ рдбреИрд╢) рдирд╣реАрдВ рд╣реИред

рдпрдХреАрдирди, рд╣рдореЗрдВ /bin/sh рд▓рдХреНрд╖реНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреБрдЫ рдмреИрд╢ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреНрд░реЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░, рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЪрд░, ... - рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред


--%

рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрдорд╛рдВрдб echoargs --% 'echo "hi there"' рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрддрд╛рд╡рд▓рд╛рдкрди рд╣реИ рдХрд┐ рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рджреЗрд╢реА рдЖрджреЗрд╢ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛред

_Fin рдХреЛ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛, рдПрдХ рдмрд╛рд░ CoreFX API рдХреЛ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рддреЛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдИ рднреА рднрд╛рдЧрдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:

  • рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдБ:

    • /bin/sh рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ, (рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ) ProcessStartInfo.FileName рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ред

    • _Literal_, _indateral_ рддрд░реНрдХ рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ ProcessStartInfo.ArgumentList рдирд┐рдореНрди рд╕рд░рдгреА:

    • 1 рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ -c

    • echoargs 'echo "hi there"' 2 рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ - рдпрд╛рдиреА, рдореВрд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди _literally_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдмрд┐рд▓реНрдХреБрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ --% рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди _as-is_ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реЗрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рддрдм _its_ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐, рд╢рд╛рдмреНрджрд┐рдХ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рддрд░реАрдХреЗ рдХреА рд╡рд░реНрддрдорд╛рди рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ -c рдФрд░ echoargs 'echo "hi there"' рдХреЛ рдПрдХ _single_ string рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдлрд╕реЛрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред CoreFX API_, рдЬреЛ, рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖрддрд╛ рд╣реИ, рддрдм _reverses_ рдпрд╣ рдХрджрдо рдФрд░ рдПрдХрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рдЯреЛрдХрди рдореЗрдВ рд╡рд╛рдкрд╕ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдпрд╣ рдЙрд▓рдЯ рд╣рдореЗрд╢рд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЯреЛрдХрди рдХреА рдореВрд▓ рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рдгрдд рд╣реЛрддрд╛ рд╣реИред

рдлрд┐рд░ рд╕реЗ: рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рднреА рдореЗрдВ рдпрд╣рд╛рдВ рднрд╛рдЧрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рд╡рд░реНрддрдорд╛рди CoreFX рд╕реАрдорд╛ рд╣реИред
рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХрд▓, рдмрдЪреА рд╣реБрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ .Arguments ProcessStartInfo рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рднрд╛рдЧрдиреЗ рд╡рд╛рд▓реЗ C ++ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╕рдВрд▓рдпрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд▓рд╛рдпрди рдХреЗ рд╕рд╛рде:

  • /bin/sh рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ, (рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ) ProcessStartInfo.FileName рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ред
  • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХрд▓, ProcessStartInfo.Arguments рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдмрдЪ рдЧрдпрд╛:
    -c "echoargs 'echo \"hi there\"'"

## рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░

рдмрд╣рд╕ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ w / o рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП -%

рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдкреЙрд╡рд░рд╢реЗрд▓ рдХреЗ рдЦреБрдж рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдХреЛрдИ рднреА рдмрдЪрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдХрднреА рднреА рдЦреЗрд▓ рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП (_Windows_ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджреБрдГрдЦ рдХреА рдмрд╛рдд рд╣реИ; рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдПрдордПрд╕ рд╕реА ++ рдирд┐рдпрдо рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИ, _to рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдЕрд╕рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ, --% рдПрдХ рдкрд▓рд╛рдпрди рд╣реИрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ)ред

  • рдЬреЛ рднреА рддрд░реНрдХ _PowerShell_ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж , рдЖрдЧрд╛рдореА ProcessStartInfo.ArgumentList рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╢рд╛рдмреНрджрд┐рдХ_ рдХреЗ _reray рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред

--% : echoargs 'echo "hi there"' рдмрд┐рдирд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ:

  • PowerShell рдЕрдкрдиреА рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 2 рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:

    • echoargs
    • echo "hi there" (рдПрдХрд▓ рдЙрджреНрдзрд░рдг - рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ _PowerShell_ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕рдорд╛рд░реЛрд╣ рдерд╛, рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛)
  • ProcessStartInfo рдХреЛ рддрдм рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ CoreFX рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде:

    • echoargs рд░реВрдк рдореЗрдВ (рдкреНрд░рднрд╛рд╡реА) .FileName рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп
    • _Literal_ echo "hi there" рдПрдХрдорд╛рддреНрд░ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ Collection<string> рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ .ArgumentList рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдлрд┐рд░ рд╕реЗ, .ArgumentList рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬреЛ рдХрд┐ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ _yet_, рд▓реЗрдХрд┐рди _in MS_ рд╕рдорд╛рди MS C ++ - рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╣рд╛рдпрдХ рд╕рд╣рд╛рдпрдХ рднрд╛рдЧ рд▓реЗрдирд╛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ SteveL-MSFT
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдореЗрдХ рдж рд╕реНрдЯреЙрдк-рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рд┐рдВрдмрд▓ (-%) рдХрд╛ рдпреВрдирд┐рдХреНрд╕ (# 3733) рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ --% рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ ред

рдпрджрд┐ /bin/sh -c рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ --% рдХреЛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ!

@ рдЯрд┐рдХрдЯ :

_If_ рдХреБрдЫ --% -_рд▓рд╛рдЗрдб_ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдФрд░ рджреЗрд╢реА рдЧреНрд▓реЛрдмрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдЕрдзрд┐рдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди-рдкреНрд░реЗрдореА рднреАрдбрд╝ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдо рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИ - рдлрд┐рд░ рдПрдХ _dadferent symbol_ - рдЬреИрд╕реЗ --$ рдЪреБрдирдирд╛

рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддреАрдХ рднреА рдиреЗрддреНрд░рд╣реАрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЧреИрд░-рдкреЛрд░реНрдЯреЗрдмрд▓ _platform-specific_ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рд╕рд╡рд╛рд▓ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдХрд┐ PowerShell рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдпрд╣ рдпреВрдирд┐рдХреНрд╕ рдкрд░ --% рдЖрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ --$ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рдареАрдХ рд╣реВрдБ --% рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред --$ рдЬреИрд╕реА рдХреБрдЫ рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рдЬреЛ / рдмрд┐рди / рд╢ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ cmd.exe рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ cmdlet рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ?

@iSazonov рдХреНрдпрд╛ рдЖрдк Invoke-Native рдЬреИрд╕рд╛ рдХреБрдЫ рд╕реБрдЭрд╛ рд░рд╣реЗ рд╣реИрдВ? рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдореИрдВ рдЙрд╕рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред

рд╣рд╛рдБ, рдЬреИрд╕реЗ Start-Native ред
рдПрдХ рдордЬрд╛рдХ рдХреЗ рд░реВрдк рдореЗрдВ :-), рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкреЙрд╡рд░рд╢реЗрд▓ рдореЗрдВ cmdlets рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ?

Build.psm1 рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ https://mnaoumov.wordpress.com/2015/01/11/execution-of-external-commands-in-powershell-done-right/ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде Start-NativeExecution

@ SteveL-MSFT

рдореИрдВ рдареАрдХ рд╣реВрдВ -% as- рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ --% рдХреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ _Windows_ рдкрд░ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, _Unix_ рдкрд░, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА

  • рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
  • рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ _cmd.exe-style_ ( %var% ) рд╣реИ
  • рдЧреНрд▓реЛрдмрдмрд┐рдВрдЧ рдФрд░ рд╡рд░реНрдб-рд╕реНрдкреНрд▓рд┐рдЯрд┐рдВрдЧ рдЬреИрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЗрд╢реА рдлреАрдЪрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

--% рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░реЗрд░рдгрд╛, рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореМрдЬреВрджрд╛ cmd.exe рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ_ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

  • рдЗрд╕ рдкреНрд░рдХрд╛рд░, --% рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдмреЗрдХрд╛рд░ рд╣реИред
  • _I__ рд╣рдо рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдПрдХ _analogous_ рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдпрд╣ /bin/sh -c -рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдХреА рдЬрд░реВрд░рдд рд╣реИ cmd /c рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдлреАрдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ, --% рдпрдХреАрдирди рдПрдХ рддрд░рд╣ рд╕реЗ _good enough_ рд╣реИ рдХрд┐ рдореЗрдВ рд╣реИ рдХрд┐ _mostly_ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ,ред
@TSlivede рдиреЗ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╢реЗрд▓ рдлреАрдЪрд░реНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рдЪрд░-рдореВрд▓реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЬреИрд╕реЗ %envVar:old=new% рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ, ^ рдПрдХ рдПрд╕реНрдХреЗрдк рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ --% рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ _single_ рдХрдорд╛рдВрдб рддрдХ рд╕реАрдорд┐рдд рд╣реИ - cmd.exe рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ; рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ --% рдкреВрд░реЗ рдХрдорд╛рдВрдб _lines_ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред

рдЬреИрд╕реЗ, --$ - рдпрджрд┐ рд▓рд╛рдЧреВ рд╣реЛ - рдХреБрдЫ рдпреВрдирд┐рдХреНрд╕ _counterpart_ рд╕реЗ --% ред

рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдореЗрдВ, рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо about_Parsing рдорджрдж рд╡рд┐рд╖рдп рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдкрд╛рддреНрд░ рд╣реИрдВ рдХрд┐ --% рд╕рднреА рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ

@iSazonov рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП Start-Native рдХрд╛ рдЕрд░реНрде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ PowerShell рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдореВрд▓ рдирд┐рд░реНрдЧрдорди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдпреЛрдЧреНрдп рд╣реЛ

@ рдкреЙрд╡рд░рд╢реЗрд▓ / рдкреЙрд╡рд░рд╢реЗрд▓-рдХрдореЗрдЯреА рдиреЗ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдФрд░ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ --% рдХрд╛ рдЕрд░реНрде рддрд░реНрдХреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рднреАрддрд░ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХреЗ рднреАрддрд░ рд╕реБрд╕рдВрдЧрдд рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рд╕рд░реНрдЬрди рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рднреНрд░рд╛рдордХ рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдкрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдХреНрд░реЙрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рд╣рд┐рдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдХреНрд░реЙрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдирдП рд╕рд░реНрдЬрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЗрди рджреЗрд╢реА рдмрдирд╛рдо cmdlets рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рд╣реИ, рдЬрдм рд░рд┐рдкреНрд░рд┐рдкреНрдк рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдкреЙрд╡рд░рд╢реЗрд▓ рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ (echo.exe "C: \ Program Files \ Git \ usrbin \ echo.exe" рд╕реЗ рд╣реИ)

рдЕрдм рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ " quirk рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

> echo.exe '"test'
test

рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдореБрдЭрд╕реЗ рдкрд░реЗ рд╣реИ ...

echo.exe '^\+.+;'
^\+.+;
echo.exe '^\+.*;'
^+.*;

рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдореВрд▓ рдЖрджреЗрд╢ рдореЗрдВ \ \ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ to

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ cmlets рдФрд░ рджреЗрд╢реА рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рд╣реИ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

@mpawelski рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл git 2.20.1.vfs.1.1.102.gdb3f8ae рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдмреЙрдХреНрд╕ рдкрд░ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ 6.2-RC.1 рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рд▓рд┐рдП рд░рд┐рдкреНрд░реЛрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рджреМрдбрд╝рд╛рдпрд╛ рдФрд░ рдЗрд╕рдиреЗ рд▓рдЧрд╛рддрд╛рд░ ^\+.+; рдХрдорд╛рдпрд╛

@ рд╕реНрдЯреАрд╡рдПрд▓-рдПрдордПрд╕рдПрдлрдЯреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @mpawelski рдиреЗ рдЧрд▓рддреА рд╕реЗ рдПрдХ рд╣реА рдХрдорд╛рдВрдб рдХреЛ рджреЛ рдмрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП '^\"+.*;' рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА - \" рднрд╛рдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП - рдЙрдЪрд┐рдд - рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд┐ рдПрдХрд▓-рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рддрд╛рдХрд┐ рдмрд╛рд╣рд░реА рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ ^\"+.*; рджреЗрдЦрддрд╛ рд╣реИ:

# Note how the "\" char. is eaten.
PS> bash -c 'printf %s "$1"' - '^\"+.*;'
^"+.*; 

#"# Running the very same command from Bash does NOT exhibit the problem:
$ bash -c 'printf %s "$1"' - '^\"+.*;'
^\"+.*; 

-% рдерд╛, рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдореМрдЬреВрджрд╛ cmd.exe рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИред --% рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдмрд░реНрддрди рдкрд╛рд╡рд░рд╕реНрд▓реЗ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рддреЗрдЬреА рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЦрдЯреНрдЯрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рдЕрдм рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рджреЗрд╢реА рдмрд░реНрддрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрд╕рдУ рдФрд░ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреМрдерд╛рдИ рд╣реИ, рддреЛ рджреЗрд╢реА рд╡рд┐рджреЗрд╢реА рдХрдорд╛рдВрдбреНрд╕ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рд╕рд╣реА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рд╢рд╛рдпрдж рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рдХреНрдпреВрдмрд╛ рдореЗрдВ рд░рд╛рдд рдХреЗ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВред :-) рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, tf.exe ; рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Git {} рдФрд░ @~1 , рдЖрджрд┐, рдЖрджрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

--% рдХреЛ PowerShell рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ - рдмрд╕ рдЗрд╕реЗ "as-is" рдиреЗрдЯрд┐рд╡ exe рдкрд░ рднреЗрдЬреЗрдВред рдПрдХ рд░рдЧрдбрд╝ рдХреЗ рд╕рд╛рде, cmd env var рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдмрджрд╕реВрд░рдд рд╣реИ рд▓реЗрдХрд┐рди рдЖрджрдореА, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЕрднреА рднреА рдХрд╛рдо рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ cmdlet рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред --% рдкрд╛рд░реНрд╕рд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдИрдУрдПрд▓ рддрдХ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИред

рд╕рдЪ рдХрд╣реВрдБ рддреЛ, PowerShell рдХреЗ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдПрдХ рд╣реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рдИрдУрдПрд▓ рддрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдЧреВрдВрдЧрд╛ред рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдпрд╣ рдереЛрдбрд╝рд╛ рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИ, macOS / рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЖрдк% envvar% рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрдЧрдд en-var рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рдпрд╣ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмреАрдЪ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╛рдд рдпрд╣ рд╣реИ, рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд╢рд░реНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣рд╡рд╛ рджреЗрддреЗ рд╣реИрдВ - рдареАрдХ рд╡рд╣реА рдирд╣реАрдВ рдЬреЛ рдореИрдВ рдкреЛрд░реНрдЯреЗрдмрд▓ рдХрд╣реВрдВрдЧрд╛:

$env:Index = 1
if ($IsWindows) {
    git show --% @~%Index%
}
else {
    git show --$ @~$Index
}

рдореИрдВ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдпрд╣ рдХрд╛рдо рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛:

$env:Index = 1
git show --% @~%Index%

рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЧрддрддрд╛ рд╣реИред

@rkeithhill

рдпрд╣ рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИред

рдЙрдиреНрдореВрд▓рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреНрд╡рд╛рд░рд╛, рд╡рд┐рдВрдбреЛрдЬ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рд╡рд╛рд▓реА

  • --% cmd.exe -рд╕реНрдЯрд╛рдЗрд▓ %...% рдкрд░реНрдпрд╛рд╡рд░рдг-рдЪрд░ рд╕рдВрджрд░реНрдн, рдЬреИрд╕реЗ %USERNAME% (рдпрджрд┐ рдХреЛрдИ рд╢реЗрд▓ рдФрд░ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереЗ, рддреЛ рдЯреЛрдХрди рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ) _verbatim_)

  • рд╕реАрдзреЗ PowerShell рдХреЗ рдореБрдВрд╣ рд╕реЗ (рдпрджрд┐ рдЖрдк рдХрд░реЗрдВрдЧреЗ; рдЬреЛрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛):

рд╡реЗрдм Cmd.exe рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреА рдЧрдИ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ ред рдпреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреЙрд╡рд░рд╢реЗрд▓ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╡реЗ рдХреБрдЫ рдЕрдХреНрд╖рд░ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдПрдХ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо (;) рдПрдХ рдбреЙрд▓рд░ рдЪрд┐рд╣реНрди ($), рдпрд╛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝, рдЖрдкрдХреЛ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рд╢рд╛рдпрдж рдХреБрдЫ рдЙрджреНрдзрд░рдг рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрдИ рдЫреЛрдЯреЗ рд╕рд┐рд░рджрд░реНрдж рдХрд╛ рд╕реНрд░реЛрдд рдкреНрд░рддреАрдд рд╣реЛ рд░рд╣рд╛ рдерд╛ред

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ "рднрд╛рдЧрдиреЗ" рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рдЬрд╛рджреВ рдкреИрд░рд╛рдореАрдЯрд░ -% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрдкрдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╣рдорд╛рд░реЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЙрджреНрдзрд░рдг рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред рд╣рдо рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдкрд░ рдирд╣реАрдВ рд░реБрдХрддреЗред рд╣рдо PowerShell рдЪрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк Cmd.exe рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬреИрд╕реЗ% TEMP%) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рддрдХ рддрд░реНрдХ (рдпрд╛ рдкрд╛рдЗрдк, рдпрджрд┐ рдЖрдк рдкрд╛рдЗрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг _Unix_ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рдлрд┐рдЯ рд╣реИ (рдКрдкрд░ рд╕реЗ

  • *.txt рдЬреИрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдЧреНрд▓реЛрдмрд┐рдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред

  • Unix рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ (POSIX-like) рдЧреЛрд▓реЗ _not_ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП %...% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; рд╡реЗ $... рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

  • рдпреВрдирд┐рдХреНрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ) рдХреЛрдИ _raw_ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИ: рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ _literals_ рдХрд╛ _array_ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА PowerShell рдпрд╛ CoreFx рд╣реИ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

  • рдпреВрдирд┐рдХреНрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ (POSIX-like) рдЧреЛрд▓реЗ '...' (рдПрдХрд▓-рдЙрджреНрдзреГрдд) рддрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ --% рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ - # 10831 рджреЗрдЦреЗрдВред

рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рднреА --% рдХреА рдЧрдВрднреАрд░, рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ :

  • рдпрджрд┐ рдЖрдк --% рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рд╕реАрдзреЗ рдЕрдкрдиреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ PowerShell рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ; рдПрдХрдорд╛рддреНрд░ - рдмреЛрдЭрд┐рд▓ - рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ _environment_ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рддрдм %...% рд╕рд╛рде рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  • рдЖрдк (...) рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдХреНрдпреЛрдВрдХрд┐ ) рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред
  • рдЖрдк ; рдФрд░ рдПрдХ рдЕрдиреНрдп рдХрдерди рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдХреНрдпреЛрдВрдХрд┐ ; рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред
  • рдЖрдк рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ --% рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдХреНрдпреЛрдВрдХрд┐ } рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред
  • рдЖрдк рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк cmd --% /c ... > file рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, cmd.exe рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдПред
  • рдЖрдк рдкрдВрдХреНрддрд┐-рдирд┐рд░рдВрддрд░рддрд╛ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рди рд╣реА рдкреЙрд╡рд░рд╢реЗрд▓ ( ` ) рдФрд░ рди рд╣реА cmd.exe ( ^ ) - рдЙрдиреНрд╣реЗрдВ _literals_ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

    • --% рдХреЗрд╡рд▓ рдХрднреА (рдЕрдзрд┐рдХрддрдо рдкрд░) рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рддрдХред


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _do_ рдХрд╛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ: _PowerShell рдХрд╛ рдЕрдкрдирд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕_ред

рд╣рд╛рдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ _PowerShell_ рдореЗрдЯрд╛рдЪреИрдЯрд░реНрд╕ рдХреЛ рдХреНрдпрд╛ рдорд╛рдирддрд╛ рд╣реИ, рдЬреЛ рджреЛрдиреЛрдВ рдХрд╛ _superset_ рд╣реИ рдЬреЛ cmd.exe рдФрд░ POSIX- рдЬреИрд╕реЗ рдЧреЛрд▓реЗ рдЬреИрд╕реЗ рдмреИрд╢ рдХреЛ рдореЗрдЯрд╛рдЪреИрдЯрд░реНрд╕ рдорд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдореАрд░, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо- рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреА рдХреАрдордд рд╣реИ рдЕрдЬреНрдЮреЗрдп рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдХрд╛ рдЕрдиреБрднрд╡ред

рддрдм рдпрд╣ рдХрд┐рддрдирд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ, рдХрд┐ PowerShell рдиреЗ " рд╡рд░реНрдгреЛрдВ рдХреЛ рдЗрддрдиреЗ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ - рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╖рдп рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рдЗрд╕ рдбреЙрдХреНрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@rkeithhill , рдореИрдВрдиреЗ рдПрдХ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреА; рдореБрдЭреЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рджреЗрдВ:

  • --% рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _is_ рдХреЛ PowerShell Core 6.2.0 рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдЬреИрд╕реЗ,
    /bin/echo --% %HOME% рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ HOME ; рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд,
    /bin/ls --% *.txt рдЙрдореНрдореАрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ *.txt рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  • рдЕрдВрддрддрдГ, рдЬрдм --% рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди / рддрд░реНрдХ рд╕рд░рдгреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреГрд╢реНрдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЕрдВрддрддрдГ рджрд┐рдЦрддрд╛ рд╣реИ (рдЬреЛ рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдпреЛрдЧреНрдп # 1761 рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ):

    • рдЖрдкрдХрд╛ рдорджрджрдЧрд╛рд░ echoArgs.exe рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреБрдбрд╝реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдиреЗ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ред
    • @ рд╕реНрдЯреАрд╡рдПрд▓-рдПрдордПрд╕рдПрдлрдЯреА рдиреЗ рддреНрд░реБрдЯрд┐ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ред

рдЕрдВрдд рдореЗрдВ, рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдкреЙрд╡рд░рд╢реЗрд▓ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкреЛрд░реНрдЯреЗрдмрд▓ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

# Works cross-platform, uses PowerShell syntax 
# Note: No need for an aux. *environment* variable (which should be cleaned up afterward)
$Index = 1
git show "@~$Index"

# Alternative, quoting just the '@'
git show `@~$Index

рд╣рд╛рдВ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдПрдХ рдЯреЛрдХрди-рд╢реБрд░реБрдЖрддреА @ рдПрдХ рдореЗрдЯрд╛рдЪреИрдХрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ PowerShell рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХрддрд╛ рдФрд░ рднреА рд╡реНрдпрд╛рдкрдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

FYI рдХрд░реЗрдВ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд▓рдЧрднрдЧ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдпреВрдирд┐рдХреНрд╕-рдкрд╕рдВрджреЛрдВ рдкрд░ рд╕рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпреВрдирд┐рдХреНрд╕ рдПрд╕рдбреАрдкреНрд░реЛрд╕реЗрд╕ рдХреЗ CoreFx рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ ParseArgumentsIntoList рдирд╛рдордХ рдПрдХ рдЪреАрдЬ рд╣реИ, рдЬреЛ CommandLineToArgvW рдкрд╛рд╕ рдмрд┐рд▓рдХреБрд▓ _setargv рд╕реНрд╡рд┐рдЪ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ (рдФрд░ рдЕрд╡рд┐рдХрд╕рд┐рдд "" рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ " рд╕реБрд╡рд┐рдзрд╛)ред рдпреВрдирд┐рдХреНрд╕ рдХреЛ рдЗрд╕рдореЗрдВ рджрд░реНрдж рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдЖрдХрд╛рд░ рдореЗрдВ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рд╣реИред

_setargv рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдмрд╛рдж рд╣рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐, рдареАрдХ рд╣реИ, рдпрд╣ рдереЛрдбрд╝реЗ рд╕реАрдЖрд░рдЯреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ рдЖрд░реНрдЧ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

az "myargs&b"

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, az рдХреЛ myargs рдФрд░ b рдирдП рдЖрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╛рдзрд╛рди рд╣реИ: az -% "myargs & b"

@ рд╕реНрдЯреАрд╡рдПрд▓-рдПрдордПрд╕рдПрдлрдЯреА, рд╣рдо Waiting - DotNetCore рд▓реЗрдмрд▓ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ - рд╕рдВрдЧреНрд░рд╣ рдЖрдзрд╛рд░рд┐рдд ProcessStartInfo.ArgumentList рд╕рдВрдкрддреНрддрд┐ .NET рдХреЛрд░ 2.1 рдХреЗ рдмрд╛рдж рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред

@TSlivede рдирдИ рдкрджреНрдзрддрд┐ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд RFC, https://github.com/PowerShell/PowerShell-RFC/pull/90 , рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╣рд╛рдБ _implementation_ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, RFC рдЪрд░реНрдЪрд╛ рдореЗрдВ, @joeyaiello рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЙрджреНрдзрд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЬреЛ рдХрд┐рд╕реА рдХреЛ __ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдирд╛ рдерд╛:

  • рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ ( foo.exe "" рд╡рд░реНрддрдорд╛рди рдореЗрдВ _no_ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ)
  • рдПрдореНрдмреЗрдбреЗрдб рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрдЪрдиреЗ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреНрд░рднрд╛рд╡реА рдирд┐рд╖реНрдХрд╛рд╕рди ( foo.exe '{ "foo": "bar" }' рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг "{ "foo": "bar" }" рдмрдЪ рдЧрдпрд╛)
  • msiexec рд░реВрдк рдореЗрдВ рдХреБрдЫ CLIs рдХреА quirks рдЬреЛ рдХреБрдЫ рджрд▓реАрд▓реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ _as рдХреЛ рдПрдХ рдкреВрд░реЗ__ ( foo.exe foo="bar none" "foo=bar none" рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред
    рдиреЛрдЯ: рдпрд╣ msiexec рдЬреЛ рдХрд┐ рдпрд╣рд╛рдБ рджреЛрд╖ рд╣реИ, рдФрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрд╡рд╢реНрдпрдХ foo="bar none" рдЙрджреНрдзрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж --% рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдкрдбрд╝ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб _break_ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ:

  • рд╣рдо рдХрдо рд╕реЗ рдХрдо рдПрдХ _opt-in_ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

    • Start-Process рд╕рд╛рде рдЯреВрдЯреА рд╣реБрдИ рдЙрджреНрдзрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдПрдХ рдФрд░ "рдЬрд╛рджреВ рдкреНрд░рддреАрдХ" рдХрд╛ рдкрд░рд┐рдЪрдп рди рджреЗрдВ --% )ред
  • рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓рднреВрдд рд╕рдорд╕реНрдпрд╛ - рдЖрдо рддреМрд░ рдкрд░, рд╡рд░реАрдпрддрд╛ рдЪрд░ рджреНрд╡рд╛рд░рд╛, рд▓реЗрдХрд┐рди using рдмрдпрд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рднреА рддреЗрдЬреА рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИ - рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд╕реНрдХреВрдкрд┐рдВрдЧ рд╣реИ; рдЕрд░реНрдерд╛рддреН, рдСрдкреНрдЯ-рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ _from_ рдХрд┐рд╕реА рдХреЗ рдСрдкреНрдЯ-рдЗрди рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред

    • рд╢рд╛рдпрдж рдпрд╣ рдЖрдорддреМрд░ рдкрд░ _lexical_ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реИ, lexically scoped using strict рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг - рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реБрд╕реНрдд - lexical рд╕рдЦреНрдд-рдореЛрдб RFC @lbbkr рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рддред

    • рд▓реЗрдХреНрд╕рд┐рдХрд▓реА рд╕реНрдХреЙрдкреНрдб using preference ProperArgumentQuoting рдЬреИрд╕рд╛ рдХреБрдЫ? (рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рдХреНрд░рд╛рдореНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред

рдЙрди рд╕рднреА рдХреЛрдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдФрд░ рдпрд╣ рд╕реАрдзреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

рд╣рд╛рдБ, рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдкрд░ рдПрдХ рдЯреВрдЯреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП workarounds рдХреЗ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдвреЗрд░ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдорд╛рддреНрд░рд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред

рдПрдХ рдирдП рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ v7 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдореМрдХрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдордп рдХреЗ рд▓рд┐рдП рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдЕрд╡рд╕рд░ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╢рд░реНрддреЗ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬрд╛рдЧрд░реВрдХ рдХрд░реЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдВрдХреНрд░рдордг рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИ, рддреЛ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рд╣рдордд, @ vexx32 : рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛, рднрд▓реЗ рд╣реА рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ рдмрд╛рд░рд╣рдорд╛рд╕реА рджрд░реНрдж рдмрд┐рдВрджреБ рдмрдирд╛ рд░рд╣реЗрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдСрдкреНрдЯ-рдЗрди рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ, рдФрд░, рдПрдХ рдмрд╛рд░ рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдпрд╛ рддреЛ рдЕрд╡рд╕рд░ рдкрд░ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ / рдпрд╛ рд╣рд░ рдмрд╛рд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдирд╛рд░рд╛рдЬрдЧреА рдЬрддрд╛рддреЗ рд╣реИрдВред

рдПрдХ рд╢реЗрд▓ рдЬреЛ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдордЬрд╝рдмреВрддреА рд╕реЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЗрд╕рдХреЗ рдореБрдЦреНрдп рд╢рд╛рд╕рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ _my_ рд╡реЛрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдЧреЗ, рдХрдо рд╕реЗ рдХрдо рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ v7 рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ WinPS рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ PSCore рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред


@iSazonov : https://github.com/PowerShell/PowerShell-RFC/pull/90 рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреА рдЖрддреНрдорд╛ рдХреЛ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

PowerShell, рдПрдХ рд╢реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, _its_ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА, рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рддрд░реНрдХ рдорд╛рдиреЛрдВ _verbatim_ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрднреА рднреА рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ PowerShell рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ; рд╡реЗ рд╕рднреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ _PowerShell_ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИред

  • рдпреВрдирд┐рдХреНрд╕-рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░, ProcessStartInfo.ArgumentList рдЕрдм рд╣рдореЗрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рддрд░реНрдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ _ray_ рдХреЛ рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ _as-is_ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддрд░реНрдХ рдХреИрд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ - рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЗрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВред

  • рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рд╣рдореЗрдВ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреА рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдПрдХ рдЭреБрд░реНрд░реА рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдЬреЛ ProcessStartInfo.ArgumentList рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЙрдкрдпреЛрдЧ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ (_batch files_ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдХрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ CLI рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ, @ SteveL-MSFT рдХреЗ az[.cmd] рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдКрдкрд░ --% ред

рд╢рд╛рдпрдж PSSA рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рддрд░реНрдХ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдореВрд▓реНрдп рд╣реИ? рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдХреЛрдб рдкрде рдмрдирд╛рдП рд░рдЦрдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдмрд╕ рдПрдХ рдЯреВрдЯреЗ рд╣реБрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрдХреНрд╕ рдХреА рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИред ЁЯШЕ

рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ PS7 WinPS рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдб-рдЗрди рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╣реЛ; рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдЬреЛ рдореИрдВ v7 рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрджрд┐ рд╣рдо рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ 5.1 рдФрд░ 7 рджреЛрдиреЛрдВ рдкрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ (рдЙрдореНрдореАрдж рд╣реИ) рдПрдХ рдмрд╣реБрдд рд╣реА рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ PS7 5.1 рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред

рдФрд░ рдлрд┐рд░ рднреА, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЦрд╛рддрд╛ рд╣реЛрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдмрд╢рд░реНрддреЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрд╛рд╖рд╛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ, рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

if ($PSVersionTable.PSVersion.Major -lt 7) {
    # use old form
}
else {
    # use new form
}

рдмрд╢рд░реНрддреЗ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдВрддрд░ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рджрд░реНрдж рд╕реЗ рд░рд╛рд╣рдд рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдм рддрдХ рдкреАрдПрд╕ рдореЗрдВ рдЕрдЬреАрдм рджреЗрд╢реА рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред ЁЯШД

рдЬреИрд╕рд╛ рдХрд┐ @TylerLeonhardt рдиреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдм рдЖрдк _multiple_ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдврд╛рдВрдЪреЗ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рднреА рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, tbhред

@ vexx32 рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдпрд╣рд╛рдБ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИред рдпрд╣ рдореВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП args рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдмрд╛рд▓реНрдЯреА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдПрдХ "рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, https://github.com/PowerShell/PowerShell/issues/1761 рдФрд░ https://github.com/PowerShell/PowerShell/issues/10675ред рджреЗрд╢реА рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рд╕рд╛рде "рдлрд┐рдХреНрд╕рд┐рдВрдЧ" рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ vNext рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдХреЛрдИ рднреА рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рдХреЛрдИ рднреА рдореМрдЬреВрджрд╛ рдпрд╛ рдирдП рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ cc рдХрд░реЗрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреИрдЧ рдХрд░ рджреВрдВрдЧрд╛ (рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯреНрд░рд┐рдкрд▓ рдЕрдиреБрдорддрд┐ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣ рдЯреИрдЧ рдХрд░реЗрдВ)ред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ: рдЗрдВрдЬрди рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реЛрдирд╛ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдмрдбрд╝рд╛ рд╕рд┐рд░рджрд░реНрдж рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдПред рд╣рдо рдЖрдВрддрд░рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░рдХреЗ рдФрд░ рдЬрдирддрд╛ рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рдмрджрд▓рдХрд░ рдЗрдВрдЬрди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрдЬрди рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@iSazonov рдореЗрд░реА рдЯреАрдо vNext рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрдВрдЬрди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ :)

рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рд╡рдВрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред * .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдЖрд░реНрдЧреНрдпреВрдореЗрдВрдЯрд▓рд┐рд╕реНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ:

Add-Type -AssemblyName "System"
function startProcess([string] $FileName, [string[]] $ArgumentList) {
    $proc = ([System.Diagnostics.Process]::new())
    $proc.StartInfo.UseShellExecute = $false
    $proc.StartInfo.FileName = $FileName
    $proc.StartInfo.CreateNoWindow = $true
    foreach ($a in $ArgumentList) { $proc.StartInfo.ArgumentList.Add($a) }
    $proc.Start()
    return $proc
}

startProcess -FileName 'C:\Program Files\nodejs\node.exe' -ArgumentList '-e','console.log(process.argv.join(''\n''))','--','abc" \" messyString'

рдмреЗрд╢рдХ рдЖрдк рдЗрд╕реЗ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рд╕реНрдерд┐рддреАрдп рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдХреБрдЫ get-command рдкреНрд░рд╡рдВрдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

* рдЕрд╕реНрд╡реАрдХрд░рдг: рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ cmdline рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред "рд╕рд╣реА" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ ArgmentList рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ .NET рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд / argv рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП cmdline рдХреА MSVCRT рд╢реИрд▓реА, main (string[] args) рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдмрд╛рд╣рд░реА рд╕реНрдкреЙрди рдХреЙрд▓ред рдпрд╣ рдирдореВрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рдХреЗ рд╕рд╛рде IS рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд NodeJS child_process рдкреНрд░рд▓реЗрдЦрди рдХреА "рд╡рд┐рдВрдбреЛрдЬрд╝ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди" рдЕрдиреБрднрд╛рдЧ рднреА рджреЗрдЦреЗрдВред

@ Artoria2e5 рдареАрдХ рдпрд╣реА рдирд┐рд╖реНрдХрд░реНрд╖ рдореИрдВ рдЖрдпрд╛ рдерд╛ред System.Diagnostics.Process рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрд░реНрдХреЛрдВ рд╕реЗ рдмрдЪрдирд╛ stdlib рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд╛рд░рдг рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

2N backslashes + " ==> N backslashes and begin/end quote
2N+1 backslashes + " ==> N backslashes + literal " 
N backslashes ==> N backslashes

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореИрдВ рддрд░реНрдХ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдВ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрджреНрдзрд░рдг рдХреЗ рд▓рд┐рдП " рдЙрджреНрдзрд░рдг рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ:
https://github.com/choovick/ps-invoke-externalcommand/blob/master/ExternalCommand/ExternalCommand.psm1#L244

рдмрд╛рд╣реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ STDOUT рдФрд░ STDERR рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдпрд╣ рдкреИрдХреЗрдЬ рдмрдирд╛рдпрд╛ рд╣реИ

https://github.com/choovick/ps-invoke-externalcommand

рдХрд┐ рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдм рддрдХ рдмрд┐рдирд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдФрд░ рдореИрдВ рдЙрди рдкрд░ рдирдИрд▓рд╛рдЗрди рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

GitHub
GitHub рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдХрд░ choovick / ps-invoke-externalcommand рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░реЗрдВред
GitHub
GitHub рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдХрд░ choovick / ps-invoke-externalcommand рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░реЗрдВред

@ рд╕реНрддреНрд░реЛрд╡рд┐рдЪ рдкреВрд░реЗ stdio рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдмрд╛рдд рдорд╣рд╛рди рд╣реИ!

рдореИрдВ рдмрдЪрдиреЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдереЛрдбрд╝рд╛ рдЕрд╕рд╣рдордд рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП ArgumentList рдХрд╣рддреА рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд╣реИ (?) рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдФрд░ рдпрд╣ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдордПрд╕ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕реНрдЯреНрд░рд┐рдВрдЧ [] SDProcessStartInfo рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ рд╣реИред (рдХреНрдпрд╛ рдЗрдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдерд╛рди рд╣реИ ... .NET рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡?)


рдмрд╛рдд рдЪреАрдд

рдЙрд╕ NodeJS рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореЗрд░рд╛ рднрд╛рдЧрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЖрдк рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ: рдпрд╣ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ (рд▓реЗрдХрд┐рди .NET рдХреЛрд░ рдФрд░ MSVCRT рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛) "" рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП \" рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдирдХреНрд╡реЙрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред \^" рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рд╕рдордп рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рд╕реЗ рдЧреБрдкреНрдд рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ред

@ Artoria2e5 рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ ArgumentList рдЕрдкрдиреЗ рд╡рд┐рдВрдбреЛ рдкрд░ PowerShell 5.1 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

`` `рдЖрдк рдЕрд╢рдХреНрдд-рднрд╛рд╡ рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗред
C: Users \ yser \ dev \ test.ps1: 7 char: 37

  • ... oreach ($ a $ ArgumentList рдореЗрдВ) {$ proc.StartInfo.ArgumentList.Add ($ a)}
  • ~ ~ ~ ~ ~ ~ ~ ~ ~

    • CategoryInfo: InvalidOperation: (:) [], RuntimeException

    • рдлреБрд▓реНрд▓реАрдХреНрдпреВрд▓рд╛рдЗрдЬрд╝реНрдбрдЗрд░реЙрдпрд░рдЖрдИрдб: рдЗрдирд╡реЛрдХрдореИрдереЛрдбреЙрдирдСрди

      `` `

рдЪреВрдВрдХрд┐ рдХрд╕реНрдЯрдо рддрд░реНрдХ рдмрдЪ рддрд░реНрдХ ...ред

рдмрд╛рдд рдЪреАрдд

NodeJS рдореЗрдВ `\ _" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХрдИ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдерд╛ :) рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ

System.Diagnostics.Process рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рд╣реИ

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ PowerShell рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЕрднреА рднреА PowerShell рдХреЛ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХрд░рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ) :

  • рдпрджрд┐ рдЖрдкрдХреЛ _embedded_ " chars рдХреЗ рд╕рд╛рде рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ _double_ рдЙрдиреНрд╣реЗрдВ Windows рдкрд░, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рдпрд╛ \ -рд╕реНрдХреЗрдк рдХрд░реЗрдВ:

    • рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдЬрдм _batch files_ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо "" рд╕рдордЭрддрд╛ рд╣реИ рддреЛ рдмрдЪ рдЧрдпрд╛ " , $arg -replace '"', '""'

      • рд╡рд┐рдВрдбреЛрдЬ рдкрд░ "" рдХрд░рдирд╛ рд╢реНрд░реЗрдпрд╕реНрдХрд░ рд╣реИ (рдпрд╣ Windows PowerShell рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ CLIs рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ _stubs_, рдЬреИрд╕реЗ Node.js рдФрд░ Azure) рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдирд┐рд╖реНрдкрд╛рджрди рдЗрд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реВрдмреА рдФрд░ рдирд╣реАрдВ рдкрд░реНрд▓)ред
    • рдЕрдиреНрдпрдерд╛ (рд╣рдореЗрд╢рд╛ рдпреВрдирд┐рдХреНрд╕ рдкрд░), $arg -replace '"', '\"'

    • рдиреЛрдЯ: _Windows PowerShell_ рдореЗрдВ, рдпрд╣ рдЕрднреА рднреА рд╣рдореЗрд╢рд╛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдорд╛рди рдореЗрдВ _spaces_ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдмреНрджрд┐рдХ \" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореВрд▓реНрдп рдореЗрдВ рд╕реНрдерд┐рддрд┐рдЬрдиреНрдп рд░реВрдк рд╕реЗ _not_ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреА рд╣реИ, рдЬреЛ PowerShell Core рдХреЗ рд╡рд┐рдкрд░реАрдд, рджреЛрд╣рд░реЗ-рдЙрджреНрдзрд░рдг рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИ; рдЬреИрд╕реЗ, '3\" of snow' рд╡рд┐рд░рд╛рдоред

    • рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЙрдкрд░реЛрдХреНрдд рднрд╛рдЧрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ \ рддреБрд░рдВрдд " , рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдП:

      • $arg = $arg -replace '(\\+)"', '$1$1"'
  • рдпрджрд┐ рдЖрдкрдХреЛ _empty_ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ '""' ред

    • '' -eq $arg ? '""' : $arg (WinPS рд╡рд┐рдХрд▓реНрдк: ($arg, '""')['' -eq $arg]
  • Windows PowerShell рдХреЗрд╡рд▓, PS рдХреЛрд░ рдореЗрдВ рдРрд╕рд╛ рди рдХрд░реЗрдВ (рдЬрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ рд╣реИ):

    • рдпрджрд┐ рдЖрдкрдХрд╛ рддрд░реНрдХ _contains рд╕реНрдерд╛рди_ рдФрд░ _end in_ (рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ) \ , рддреЛ рдЕрдиреБрдЧрд╛рдореА \ рдЗрдВрд╕реНрдЯреЗрдВрд╕ (s) рджреЛрдЧреБрдирд╛ рдХрд░реЗрдВред

      • if ($arg -match ' .*?(\\+)$') { $arg = $arg + $Matches[1] }
  • рдпрджрд┐ cmd / рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдЙрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдордВрдЧрд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИ рдЬреЛ _not_ рдХреЗ рдкрд╛рд╕ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реИрдВ (рдЗрд╕рд▓рд┐рдП PowerShell рджреНрд╡рд╛рд░рд╛ _not_ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрд╡рдд: рджреЛрд╣рд░реЗ-рдЙрджреНрдзрд░рдг рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ) рд▓реЗрдХрд┐рди &|<>^,; (рдЬреИрд╕реЗ: a&b ) рдХреЗ рдХрд┐рд╕реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ cmd / рдмреИрдЪ / рдлрд╝рд╛рдЗрд▓ рдХреЙрд▓ рдХреЛ рддреЛрдбрд╝рддрд╛ рдирд╣реАрдВ рд╣реИ:

    • $arg = '"' + $arg + '"'
  • рдпрджрд┐ рдЖрдкрдХреЛ msiexec.exe рдЬреИрд╕реЗ рдЧреИрд░-рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рддрд░реНрдХ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░реЗрдВ:

    • 'foo="bar none"'

рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░ рдпреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб _break_ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред


рдиреАрдЪреЗ рд╕рд░рд▓ (рдЧреИрд░-рдЙрдиреНрдирдд) рдлрд╝рдВрдХреНрд╢рди iep ("рдмрд╛рд╣рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП") рд╣реИ, рдЬреЛ:

  • рд╕рдм рд╕реЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмрдЪрд╛рд╡ рд╕рд╣рд┐рдд, рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреА рд╣реИ рд╕реНрд╡рдд: рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рдХреЗ рд▓рд┐рдП msiexec рдФрд░ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ "" рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдмрдЪрдиреЗ \" рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

    • рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЛ рдХреЗрд╡рд▓ _PowerShell_ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдХреЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдПрд╕реНрдХреЗрдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдкрд╛рд╡рд░рд╢реЗрд▓ рдЬреЛ рд╡рд░реНрдмреЗрдЯ рдорд╛рди рджреЗрдЦрддрд╛ рд╣реИ рд╡рд╣ рд▓рдХреНрд╖реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рднреА рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

    • PowerShell _Core_ рдореЗрдВ, рдЗрд╕реЗ рдмрд╣реБрдд рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; Windows PowerShell рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдореНрдмреЗрдбреЗрдб рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ \" рднрд╛рдЧрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ)ред

  • рд╢реЗрд▓-рдХрдорд╛рдВрдб рдЗрдирд╡реЛрдХреЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

    • рдмрд╕ рдЕрдкрдиреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ iep┬а рдкреНрд░реАрдкреЗрдВрдб рдХрд░реЗрдВред

  • рд╕реАрдзреЗ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╣реЛрдЧрд╛:

    • PowerShell рдХреА рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ

    • рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рд▓рд╛рдЗрди рднреЗрдЬрддрд╛ рд╣реИ

    • рдмрд╛рд╣реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ $LASTEXITCODE рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдБрдХрд┐, $? _not_ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдиреЛрдЯ: рдлрд╝рдВрдХреНрд╢рди рдЬрд╛рдирдмреВрдЭрдХрд░ рдиреНрдпреВрдирддрд░ рд╣реИ (рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рдгрд╛рдПрдВ, рдХреЛрдИ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╕рд╣рд╛рдпрддрд╛, рд▓рдШреБ (рдЕрдирд┐рдпрдорд┐рдд) рдирд╛рдо), рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╡рд┐рдиреАрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдмрд╕ рдЕрдкрдиреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ iep рдкреНрд░реАрдкреЗрдВрдб рдХрд░реЗрдВ, рдФрд░ рдЪреАрдЬреЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

EchoArgs.exe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реНрд╡рд╛рди ( EchoArgs.exe _ choco install echoargs -y рд╕рд╛рде _elevated_ рд╕рддреНрд░ рд╕реЗ рдЪреЙрдХрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд):

PS> iep echoargs '' 'a&b' '3" of snow' 'Nat "King" Cole' 'c:\temp 1\' 'a \" b'
Arg 0 is <>
Arg 1 is <a&b>
Arg 2 is <3" of snow>
Arg 3 is <Nat "King" Cole>
Arg 4 is <c:\temp 1\>
Arg 5 is <a \" b>

Command line:
"C:\ProgramData\chocolatey\lib\echoargs\tools\EchoArgs.exe" "" a&b "3\" of snow" "Nat \"King\" Cole" "c:\temp 1\\" "a \\\" b"

рдЙрдкрд░реЛрдХреНрдд PowerShell рдХреЛрд░ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЦрд╛рд▓реА рддрд░реНрдХ рд╕рд╣рд┐рдд рдкрд╛рд╡рд░рд╢реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░рд╢реЗрд▓ рдореЗрдВ, 3" of snow рддрд░реНрдХ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ \" рдмрдЪрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рддреА рд╣реИрдВ, рдЖрдк echoargs.cmd рдХреЛ echoargs.exe рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

'@echoargs.exe %*' | Set-Content echoargs.cmd

iep .\echoargs.cmd '' 'a&b' '3" of snow' 'Nat "King" Cole' 'c:\temp 1\' 'a \" b' рд░реВрдк рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ

рдЪреВрдБрдХрд┐ рдЕрдм рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, "" -рд╕реЙрд░реНрдлрд╝рд┐рдВрдЧ рдХрд╛рд░реНрдпрд░рдд рд╣реИ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ 3" of snow рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдпреВрдирд┐рдХреНрд╕-рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк sh рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдХрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо echoargs :

@'
#!/bin/sh
i=0; for a; do printf '%s\n' "\$$((i+=1))=[$a]"; done
'@ > echoargs; chmod a+x echoargs

iep ./echoargs '' 'a&b' '3" of snow' 'Nat "King" Cole' 'c:\temp 1\' 'a \" b' рд░реВрдк рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВ


рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдПрдХ ie (рдореИрдВ nvoke (рдмрд╛рд╣реНрдп) рдИ xecutable) рдореЗрдВ рдореИрдВ рд╕рд┐рд░реНрдл рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдПрдХ рдореЙрдбреНрдпреВрд▓ Native , рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдмрдЬрд╛рдпред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
Install-Module Native -Scope CurrentUser ред
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ ins ( Invoke-NativeShell ) рдХрдорд╛рдВрдб рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ # 13068 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ - https://github.com/PowerShell/PowerShell/issues/13068#ecuecomment-671572939 рджреЗрдЦреЗрдВ рдмреНрдпреЛрд░рд╛ рд╣реЗрддреБред

iep рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб (рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ Native рдмрдЬрд╛рдп - рдКрдкрд░ рджреЗрдЦреЗрдВ):

function iep {

  Set-StrictMode -Version 1
  if (-not (Test-Path Variable:IsCoreClr)) { $IsCoreCLR = $false }
  if (-not (Test-Path Variable:IsWindows)) { $IsWindows = $env:OS -eq 'Windows_NT' }

  # Split into executable name/path and arguments.
  $exe, [string[]] $argsForExe = $args

  # Resolve to the underlying command (if it's an alias) and ensure that an external executable was specified.
  $app = Get-Command -ErrorAction Stop $exe
  if ($app.ResolvedCommand) { $app = $app.ResolvedCommand }
  if ($app.CommandType -ne 'Application') { Throw "Not an external program, non-PS script, or batch file: $exe" }

  if ($argsForExe.Count -eq 0) {
    # Argument-less invocation
    & $exe
  }
  else {
    # Invocation with arguments: escape them properly to pass them through as literals.
    # Decide whether to escape embedded double quotes as \" or as "", based on the target executable.
    # * On Unix-like platforms, we always use \"
    # * On Windows, we use "" where we know it's safe to do. cmd.exe / batch files require "", and Microsoft compiler-generated executables do too, often in addition to supporting \",
    #   notably including Python and Node.js
    #   However, notable interpreters that support \" ONLY are Ruby and Perl (as well as PowerShell's own CLI, but it's better to call that with a script block from within PowerShell).
    #   Targeting a batch file triggers "" escaping, but in the case of stub batch files that simply relay to a different executable, that could still break
    #   if the ultimate target executable only supports \" 
    $useDoubledDoubleQuotes = $IsWindows -and ($app.Source -match '[/\\]?(?<exe>cmd|msiexec)(?:\.exe)?$' -or $app.Source -match '\.(?<ext>cmd|bat|py|pyw)$')
    $doubleQuoteEscapeSequence = ('\"', '""')[$useDoubledDoubleQuotes]
    $isMsiExec = $useDoubledDoubleQuotes -and $Matches['exe'] -eq 'msiexec'
    $isCmd = $useDoubledDoubleQuotes -and ($Matches['exe'] -eq 'cmd' -or $Matches['ext'] -in 'cmd', 'bat')
    $escapedArgs = foreach ($arg in $argsForExe) {
      if ('' -eq $arg) { '""'; continue } # Empty arguments must be passed as `'""'`(!), otherwise they are omitted.
      $hasDoubleQuotes = $arg.Contains('"')
      $hasSpaces = $arg.Contains(' ')
      if ($hasDoubleQuotes) {
        # First, always double any preexisting `\` instances before embedded `"` chars. 
        # so that `\"` isn't interpreted as an escaped `"`.
        $arg = $arg -replace '(\\+)"', '$1$1"'
        # Then, escape the embedded `"` chars. either as `\"` or as `""`.
        # If \" escaping is used:
        # * In PS Core, use of `\"` is safe, because its use triggers enclosing double-quoting (if spaces are also present).
        # * !! In WinPS, sadly, that isn't true, so something like `'foo="bar none"'` results in `foo=\"bar none\"` -
        #   !! which - due to the lack of enclosing "..." - is seen as *2* arguments by the target app, `foo="bar` and `none"`.
        #   !! Similarly, '3" of snow' would result in `3\" of snow`, which the target app receives as *3* arguments, `3"`, `of`, and `snow`.
        #   !! Even manually enclosing the value in *embedded* " doesn't help, because that then triggers *additional* double-quoting.
        $arg = $arg -replace '"', $doubleQuoteEscapeSequence
    }
      elseif ($isMsiExec -and $arg -match '^(\w+)=(.* .*)$') { 
        # An msiexec argument originally passed in the form `PROP="value with spaces"`, which PowerShell turned into `PROP=value with spaces`
        # This would be passed as `"PROP=value with spaces"`, which msiexec, sady, doesn't recognize (`PROP=valueWithoutSpaces` works fine, however).
        # We reconstruct the form `PROP="value with spaces"`, which both WinPS And PS Core pass through as-is.
        $arg = '{0}="{1}"' -f $Matches[1], $Matches[2]
      }
      # As a courtesy, enclose tokens that PowerShell would pass unquoted in "...", 
      # if they contain cmd.exe metachars. that would break calls to cmd.exe / batch files.
      $manuallyDoubleQuoteForCmd = $isCmd -and -not $hasSpaces -and $arg -match '[&|<>^,;]'
      # In WinPS, double trailing `\` instances in arguments that have spaces and will therefore be "..."-enclosed,
      # so that `\"` isn't mistaken for an escaped `"` - in PS Core, this escaping happens automatically.
      if (-not $IsCoreCLR -and ($hasSpaces -or $manuallyDoubleQuoteForCmd) -and $arg -match '\\') {
        $arg = $arg -replace '\\+$', '$&$&'
      }
      if ($manuallyDoubleQuoteForCmd) {
        # Wrap in *embedded* enclosing double quotes, which both WinPS and PS Core pass through as-is.
        $arg = '"' + $arg + '"'
      }
      $arg
    }
    # Invoke the executable with the properly escaped arguments.
    & $exe $escapedArgs
  }
}

@ mklement0 рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдРрд╕реЗ рдЬреЛрдбрд╝реЗ рд╣реИрдВ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:

iep echoargs 'somekey="value with spaces"' 'te\" st'

Arg 0 is <somekey="value>
Arg 1 is <with>
Arg 2 is <spaces">
Arg 3 is <te\">
Arg 4 is <st>

Command line:
"C:\ProgramData\chocolatey\lib\echoargs\tools\EchoArgs.exe" somekey=\"value with spaces\" te\\\" st

рдпрд╣рд╛рдБ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рддрд░реНрдХ рд╣реИ :)

$Arguments = @(
    'trippe slash at the end \\\',
    '4 slash at the end \\\\',
    '\\servername\path\',
    'path=\\servername\path\',
    'key="\\servername\pa th\"',
    '5 slash at the end \\\\\',
    '\\" double slashed double quote',
    'simple',
    'white space',
    'slash at the end \',
    'double slash at the end \\',
    'trippe slash at the end \\\',
    'trippe slash at the end with space \\\ ',
    '\\" double slashed double quote',
    'double slashed double quote at the end \\"',
    '\\\" triple slashed double quote',
    'triple slashed double quote at the end \\\"',
    # slash
    'single slashes \a ^ \: \"',
    'path="C:\Program Files (x86)\test\"'
    # quotes
    'double quote " and single quote ''',
    # windows env var syntax
    "env var OS: %OS%",
    # utf16
    ('"utf16 ETHIOPIC WORDSPACE: \u1361"' | ConvertFrom-Json),
    # special chars
    "newLine`newLine"
    "tab`tab"
    "backspace`bbackspace"
    "carriage`rafter",
    "formFeed`fformFeed",
    # JSON Strings
    @"
[{"_id":"5cdab57e4853ea7b5a707070","index":0,"guid":"25319946-950e-4fe8-9586-ddd031cbb0fc","isActive":false,"balance":"`$2,841.15","picture":"http://placehold.it/32x32","age":39,"eyeColor":"blue","name":{"first":"Leach","last":"Campbell"},"company":"EMOLTRA","email":"[email protected]","phone":"+1 (864) 412-3166","address":"127 Beadel Street, Vivian, Vermont, 1991","about":"Ex labore non enim consectetur id ullamco nulla veniam Lorem velit cillum aliqua amet nostrud. Occaecat ipsum do est qui sint aliquip anim culpa laboris tempor amet. Aute sint anim est sint elit amet nisi veniam culpa commodo nostrud cupidatat in ex.","registered":"Monday, August 25, 2014 4:04 AM","latitude":"-12.814443","longitude":"75.880149","tags":["pariatur","voluptate","sint","Lorem","eiusmod"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Lester Bender"},{"id":1,"name":"Concepcion Jarvis"},{"id":2,"name":"Elsie Whitfield"}],"greeting":"Hello, Leach! You have 10 unread messages.","favoriteFruit":"strawberry"},{"_id":"5cdab57e8cd0ac577ab534a4","index":1,"guid":"0be10c87-6ce7-46c4-8dd6-23b1d9827538","isActive":false,"balance":"`$1,049.56","picture":"http://placehold.it/32x32","age":33,"eyeColor":"green","name":{"first":"Lacey","last":"Terrell"},"company":"XSPORTS","email":"[email protected]","phone":"+1 (858) 511-2896","address":"850 Franklin Street, Gordon, Virginia, 4968","about":"Eiusmod nostrud mollit occaecat Lorem consectetur enim pariatur qui eu. Proident aliqua sunt incididunt Lorem adipisicing ea esse do ullamco excepteur duis qui. Irure labore cillum aliqua officia commodo incididunt esse ad duis ea. Occaecat officia officia laboris veniam id dolor minim magna ut sit. Aute quis occaecat eu veniam. Quis exercitation mollit consectetur magna officia sit. Irure ullamco laborum cillum dolore mollit culpa deserunt veniam minim sunt.","registered":"Monday, February 3, 2014 9:19 PM","latitude":"-82.240949","longitude":"2.361739","tags":["nostrud","et","non","eiusmod","qui"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Meyers Dillard"},{"id":1,"name":"Jacobson Franco"},{"id":2,"name":"Hunt Hernandez"}],"greeting":"Hello, Lacey! You have 8 unread messages.","favoriteFruit":"apple"},{"_id":"5cdab57eae2f9bc5184f1768","index":2,"guid":"3c0de017-1c2a-470e-87dc-5a6257e8d9d9","isActive":true,"balance":"`$3,349.49","picture":"http://placehold.it/32x32","age":20,"eyeColor":"green","name":{"first":"Knowles","last":"Farrell"},"company":"DAYCORE","email":"[email protected]","phone":"+1 (971) 586-2740","address":"150 Bath Avenue, Marion, Oregon, 991","about":"Eiusmod sint commodo eu id sunt. Labore esse id veniam ea et laborum. Dolor ad cupidatat Lorem amet. Labore ut commodo amet commodo. Ipsum reprehenderit voluptate non exercitation anim nostrud do. Aute incididunt ad aliquip aute mollit id eu ea. Voluptate ex consequat velit commodo anim proident ea anim magna amet nisi dolore.","registered":"Friday, September 28, 2018 7:51 PM","latitude":"-11.475201","longitude":"-115.967191","tags":["laborum","dolor","dolor","magna","mollit"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Roxanne Griffith"},{"id":1,"name":"Walls Moore"},{"id":2,"name":"Mattie Carney"}],"greeting":"Hello, Knowles! You have 8 unread messages.","favoriteFruit":"strawberry"},{"_id":"5cdab57e80ff4c4085cd63ef","index":3,"guid":"dca20009-f606-4b99-af94-ded6cfbbfa38","isActive":true,"balance":"`$2,742.32","picture":"http://placehold.it/32x32","age":26,"eyeColor":"brown","name":{"first":"Ila","last":"Hardy"},"company":"OBLIQ","email":"[email protected]","phone":"+1 (996) 556-2855","address":"605 Hillel Place, Herald, Delaware, 9670","about":"Enim eiusmod laboris amet ex laborum do dolor qui occaecat ex do labore quis sunt. Veniam magna non nisi ipsum occaecat anim ipsum consectetur ex laboris aute ut consectetur. Do eiusmod tempor dolore eu in dolore qui anim non et. Minim amet exercitation in in velit proident sint aliqua Lorem reprehenderit labore exercitation.","registered":"Friday, April 21, 2017 6:33 AM","latitude":"64.864232","longitude":"-163.200794","tags":["tempor","eiusmod","mollit","aliquip","aute"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Duncan Guy"},{"id":1,"name":"Jami Maxwell"},{"id":2,"name":"Gale Hutchinson"}],"greeting":"Hello, Ila! You have 7 unread messages.","favoriteFruit":"banana"},{"_id":"5cdab57ef1556326f77730f0","index":4,"guid":"f2b3bf60-652f-414c-a5cf-094678eb319f","isActive":true,"balance":"`$2,603.20","picture":"http://placehold.it/32x32","age":27,"eyeColor":"brown","name":{"first":"Turner","last":"King"},"company":"DADABASE","email":"[email protected]","phone":"+1 (803) 506-2511","address":"915 Quay Street, Hinsdale, Texas, 9573","about":"Consequat sunt labore tempor anim duis pariatur ad tempor minim sint. Nulla non aliqua veniam elit officia. Ullamco et irure mollit nulla do eiusmod ullamco. Aute officia elit irure in adipisicing et cupidatat dolor in sint elit dolore labore. Id esse velit nisi culpa velit adipisicing tempor sunt. Eu sunt occaecat ex pariatur esse.","registered":"Thursday, May 21, 2015 7:44 PM","latitude":"88.502961","longitude":"-119.654437","tags":["Lorem","culpa","labore","et","nisi"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Leanne Lawson"},{"id":1,"name":"Jo Shepard"},{"id":2,"name":"Effie Barnes"}],"greeting":"Hello, Turner! You have 6 unread messages.","favoriteFruit":"apple"},{"_id":"5cdab57e248f8196e1a60d05","index":5,"guid":"875a12f0-d36a-4e7b-aaf1-73f67aba83f8","isActive":false,"balance":"`$1,001.89","picture":"http://placehold.it/32x32","age":38,"eyeColor":"blue","name":{"first":"Petty","last":"Langley"},"company":"NETUR","email":"[email protected]","phone":"+1 (875) 505-2277","address":"677 Leonard Street, Ticonderoga, Utah, 1152","about":"Nisi do quis sunt nisi cillum pariatur elit dolore commodo aliqua esse est aute esse. Laboris esse mollit mollit dolor excepteur consequat duis aute eu minim tempor occaecat. Deserunt amet amet quis adipisicing exercitation consequat deserunt sunt voluptate amet. Ad magna quis nostrud esse ullamco incididunt laboris consectetur.","registered":"Thursday, July 31, 2014 5:16 PM","latitude":"-57.612396","longitude":"103.91364","tags":["id","labore","deserunt","cillum","culpa"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Colette Mullen"},{"id":1,"name":"Lynnette Tanner"},{"id":2,"name":"Vickie Hardin"}],"greeting":"Hello, Petty! You have 9 unread messages.","favoriteFruit":"banana"},{"_id":"5cdab57e4df76cbb0db9be43","index":6,"guid":"ee3852fe-c597-4cb6-a336-1466e8978080","isActive":true,"balance":"`$3,087.87","picture":"http://placehold.it/32x32","age":33,"eyeColor":"brown","name":{"first":"Salas","last":"Young"},"company":"PLAYCE","email":"[email protected]","phone":"+1 (976) 473-2919","address":"927 Elm Place, Terlingua, North Carolina, 2150","about":"Laborum laboris ullamco aliquip occaecat fugiat sit ex laboris veniam tempor tempor. Anim quis veniam ad commodo culpa irure est esse laboris. Fugiat nostrud elit mollit minim. Velit est laborum ut quis anim velit aute enim culpa amet ipsum.","registered":"Thursday, October 1, 2015 10:59 AM","latitude":"-57.861212","longitude":"69.823065","tags":["eu","est","et","proident","nisi"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Day Solomon"},{"id":1,"name":"Stevens Boyd"},{"id":2,"name":"Erika Mayer"}],"greeting":"Hello, Salas! You have 10 unread messages.","favoriteFruit":"apple"},{"_id":"5cdab57ed3c91292d30e141d","index":7,"guid":"ef7c0beb-8413-4f39-987f-022c4e8ec482","isActive":false,"balance":"`$2,612.45","picture":"http://placehold.it/32x32","age":36,"eyeColor":"brown","name":{"first":"Gloria","last":"Black"},"company":"PULZE","email":"[email protected]","phone":"+1 (872) 513-2364","address":"311 Guernsey Street, Hatteras, New Mexico, 2241","about":"Laborum sunt exercitation ea labore ullamco dolor pariatur laborum deserunt adipisicing pariatur. Officia velit duis cupidatat eu officia magna magna deserunt do. Aliquip cupidatat commodo duis aliquip in aute dolore occaecat esse ad. Incididunt est magna in pariatur ut do ex sit minim cupidatat culpa. Voluptate eu veniam cupidatat exercitation.","registered":"Friday, June 26, 2015 7:59 AM","latitude":"38.644208","longitude":"-45.481555","tags":["sint","ea","anim","voluptate","elit"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Abby Walton"},{"id":1,"name":"Elsa Miranda"},{"id":2,"name":"Carr Abbott"}],"greeting":"Hello, Gloria! You have 5 unread messages.","favoriteFruit":"strawberry"},{"_id":"5cdab57edc91491fb70b705d","index":8,"guid":"631ff8a0-ce4c-4111-b1e4-1d112f4ecdc7","isActive":false,"balance":"`$2,550.70","picture":"http://placehold.it/32x32","age":25,"eyeColor":"brown","name":{"first":"Deirdre","last":"Huber"},"company":"VERBUS","email":"[email protected]","phone":"+1 (871) 468-3420","address":"814 Coles Street, Bartonsville, Tennessee, 7313","about":"Ipsum ex est culpa veniam voluptate officia consectetur quis et irure proident pariatur non. In excepteur est aliqua duis duis. Veniam consectetur cupidatat reprehenderit qui qui aliqua.","registered":"Monday, April 1, 2019 2:33 AM","latitude":"-75.702323","longitude":"45.165458","tags":["labore","aute","nisi","laborum","laborum"],"range":[0,1,2,3,4,5,6,7,8,9],"friends":[{"id":0,"name":"Genevieve Clarke"},{"id":1,"name":"Black Sykes"},{"id":2,"name":"Watson Hudson"}],"greeting":"Hello, Deirdre! You have 8 unread messages.","favoriteFruit":"strawberry"}]
"@
)

System.Diagnostics.Process рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реАрдорд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ STDOUT STDERR рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЪрд░ рдореЗрдВ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдзрд╛рд╡рдХ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛, рдЬреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣реА рдирд╣реАрдВ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдЪрд▓рддреЗ рд╡рд┐рдВрдбреЛрдЬ рдкреЙрдЬрд╝рд╢реЗрд▓ 5 рдореЗрдВ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ 6 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ 5 рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рддрдХ 7 рд╡рд┐рдВрдбреЛрдЬ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рд▓реЗрддрд╛ рд╣реИ ...

рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдРрд╕реЗ рдЬреЛрдбрд╝реЗ рд╣реИрдВ рдЬреЛ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:

рд╣рд╛рдВ, рдпреЗ рд╕реАрдорд╛рдПрдБ _Windows PowerShell_ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП "" рдПрдореНрдмреЗрдбреЗрдб " рдмрдЪрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рднреА рдЗрдирд╡реЛрдХреЗрд╢рди рдореЗрдВ "" рднрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ (_most_, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд╕рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ), рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░, рдЖрдкрдХреЗ рд╕рдВрдкрд╛рджрди рдореЗрдВ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдХрд╣рд╛ рд╣реИ, рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: PowerShell _Core_ рдореЗрдВ:

  • iep echoargs 'somekey="value with spaces"' 'te\" st' рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд░реНрдХ рднреА рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рднреА рдЗрдирд╡реЛрдХреЗрд╢рди рдореЗрдВ "" рднрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ (_most_, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд╕рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ), рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рдЗрд╕реЗ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреВрдВрдЧрд╛ред рдореИрдВ рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ sqlcmd рд╕реЗ рдирд┐рдкрдЯрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "" рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП - рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рдЧрдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ C ++ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛

рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╕рдордп Microsoft C / C ++ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

  • рддрд░реНрдХ рдХреЛ рд╕рдлреЗрдж рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдпрд╛ рддреЛ рдПрдХ рд╕реНрдерд╛рди рдпрд╛ рдПрдХ рдЯреИрдм рд╣реИред

  • рдХреИрд░реЗрдЯ рдХреИрд░реЗрдХреНрдЯрд░ (^) рдХреЛ рдПрд╕реНрдХреЗрдк рдХреИрд░реЗрдХреНрдЯрд░ рдпрд╛ рд╕реАрдорд╛рдВрдХрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ argv рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

  • рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ (" рд╕реНрдЯреНрд░рд┐рдВрдЧ ") рд╕реЗ рдШрд┐рд░реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдПрдХрд▓ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рднрд▓реЗ рд╣реА рднреАрддрд░ рдирд┐рд╣рд┐рдд рд╕рдлреЗрдж рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ред рдПрдХ рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рддрд░реНрдХ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • рдПрдХ рдмреИрдХрд╕реНрд▓реИрд╢ (\ ") рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдЪрд░рд┐рддреНрд░ (") рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  • рдмреИрдХрд╕реНрд▓реИрд╢ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рддреБрд░рдВрдд рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рд╕реЗ рдкрд╣рд▓реЗ рди рд╣реЛрдВред

  • рдпрджрд┐ рдмреИрдХрд╕реНрд▓реИрд╢ рдХреА рдПрдХ рднреА рд╕рдВрдЦреНрдпрд╛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдХреЗ рдмрд╛рдж рд╣реЛрддреА рд╣реИ, рддреЛ рдмреИрдХрд╕реНрд▓реИрд╢ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП argv рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдмреИрдХрд╕реНрд▓реИрд╢ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд┐рдорд░рд┐рдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • рдпрджрд┐ рдмреИрдХрд╕реНрд▓реИрд╢ рдХреА рдПрдХ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдХреЗ рдмрд╛рдж рд╣реЛрддреА рд╣реИ, рддреЛ рдмреИрдХрд╕реНрд▓реИрд╢ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд▓рд┐рдП argv рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдмреИрдХрд╕реНрд▓реИрд╢ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рдЙрджреНрдзрд░рдг рдХреЗ рджреНрд╡рд╛рд░рд╛ рдбрдмрд▓ рдХреЛрдЯреЗрд╢рди рдЪрд┐рд╣реНрди "рдмрдЪ" рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдбрдмрд▓ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди (") argv рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рд╣реИред

рдпрд╣ рднреА _exec, _wexec рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ:

рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╕реНрдкреЗрд╕ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _exec рд╕реНрдЯреНрд░рд┐рдВрдЧ "hi there" рд╣реЛрдиреЗ рд╕реЗ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛ рддрд░реНрдХ, "hi" рдФрд░ "there" ред рдпрджрд┐ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ "рд╣рд╛рдп рд╡рд╣рд╛рдБ" рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдХреЗ рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ: "\"hi there\"" ред

рдкрд╛рдпрдерди рдХреИрд╕реЗ рдореВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ

рдкрд╛рдпрдерди рдХреЗ subprocess.Popen рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдЕрдиреБрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрд░реАрдХреЗ рд╕реЗ args рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд╛рдЧрдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди subprocess.list2cmdline ред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ --% рдпрд╛ рдбрдмрд▓ рднрд╛рдЧрдиреЗ (PowerShell рдФрд░ CMD рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рдмрдЬрд╛рдп PowerShell рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдбреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЧ рдПрдЬрд╝реНрдпреЛрд░ рд╕реАрдПрд▓рдЖрдИ (рдЬреЛ рдХрд┐ python.exe рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ) рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдЧрд░ рдпрд╣ v7 рдХреЗ рд╕рд╛рде рд╕рд░рд▓реАрдХреГрдд рд╣реИ, рддреЛ рдХреНрдпрд╛ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдЯреАрдо рдХрд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдмрд╣рд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЦреИрд░, рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ PS 7.1 рдХреЗ рд▓рд┐рдП рдлрд╝реЛрдХрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рджреЗрд╢реА рдЖрджреЗрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рд╣реИред 7.1 рдирд┐рд╡реЗрд╢ рдкрд░ рдПрдХ

рдЕрдзрд┐рдХрд╛рдВрд╢ рджреЗрд╢реА рдХрдорд╛рдВрдбреНрд╕ PowerShell рдХреЗ рднреАрддрд░ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рддрд░реНрдХ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ (рдЬреИрд╕реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛)ред рдЗрд░рд╛рджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рджреЗрд╢реА рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕реЗ PowerShell рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ PowerShell рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рддреЛ рд╢рд╛рдпрдж (рдЙрдореНрдореАрдж рд╣реИ) рдпрд╣ 7.1 рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

рдзрдиреНрдпрд╡рд╛рдж, @rkeithhill , рд▓реЗрдХрд┐рди рдирд╣реАрдВ:

рдЗрд░рд╛рджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рджреЗрд╢реА рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕реЗ PowerShell рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ PowerShell рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рддрд░рд╣ рдХреА рдзреНрд╡рдирд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд --% (рд╕реНрдЯреЙрдк-рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рддреАрдХ) рдкрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ?

@ рд╕реНрдЯреАрд╡рдПрд▓-рдПрдордПрд╕рдПрдлрдЯреА, рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдЗрд╕ рдЖрдЧрд╛рдореА рдлреАрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?


рдкреБрдирд░реНрдХрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╕рднреА рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ _PowerShell_ рдХреА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ PowerShell рдиреЗ рджреГрд╢реНрдпреЛрдВ рд╕реЗ рдмрдЪрдХрд░ рд╕рднреА рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрд╛ рд╣реИ _ (Windows рдкрд░) Unix рдкрд░ рдпрд╣ рдЕрдм рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЕрдм .NET рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рд╣рдореЗрдВ рдЯрд╛рд░рдЧреЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╢рдмреНрджрд╢рдГ рдЯреЛрдХрди рдХреА рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) - рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд┐рдХреНрд╕ рдХреЛ рдСрдкреНрдЯ-рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде, рдЕрдиреНрдп рдЧреЛрд▓реЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде _some_ fiddling рдХреА рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╕реАрдзрд╛ рд╣реЛрдЧрд╛ - рдФрд░, --% , рдЖрдк PowerShell рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдЪрд░ рд╡рд┐рд╕реНрддрд╛рд░ ( (...) рд╕рд╛рде рднрд╛рд╡) рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ

  • рдЖрдкрдХреЛ \" рдХреЛ `" рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди _ "..." _ рдХреЗ рдЕрдВрджрд░ред

  • рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ _no (рдЕрдиреНрдп) рд╢реЗрд▓_ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддрд╛рдХрд┐ рдмреИрд╢-рд╢реИрд▓реА рдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг-рдЪрд░ рд╕рдВрджрд░реНрдн рдЬреИрд╕реЗ $USER _not_ рдХрд╛рдо рдХрд░реЗрдВ (рдЙрдиреНрд╣реЗрдВ _PowerShell_ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛), рдЬрдм рддрдХ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╕рдорддреБрд▓реНрдп PowerShell рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕, $env:USER ред

    • рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ: --% рд▓рд┐рдП рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ _invariably_ - cmd.exe -рд╕реНрдЯрд╛рдЗрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг-рдЪрд░ рд╕рдВрджрд░реНрдн рдЬреИрд╕реЗ %USERNAME% , рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рди рдХреЗрд╡рд▓ doesn ' t рд╕рдорд░реНрдерди рдмреИрд╢-рд╢реИрд▓реА рдХреЗ рд╕рдВрджрд░реНрдн ( $USER ) _verbatim_ рдХреЛ рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ cmd.exe -рд╕реНрдЯрд╛рдЗрд▓ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ '...' рдХреЛ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ
    • рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреЗрдЦреЗрдВ рдХрд┐ _does_ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рджреЗрд╢реА рд╢реЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред
  • рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ PowerShell рдореЗрдВ _aditional_ metacharacters рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╢рдмреНрджрд╢рдГ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрджреНрдзреГрдд / рднрд╛рдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдпреЗ рд╣реИрдВ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ @ рдХреЗрд╡рд▓ рддрд░реНрдХ рдХреЗ _first_ char рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред)

    • POSIX- рдЬреИрд╕реЗ рдЧреЛрд▓реЗ (рдЬреИрд╕реЗ, рдмреИрд╢): @ { } ` (рдФрд░ $ , рдЕрдЧрд░ рдЖрдк PowerShell рджреНрд╡рд╛рд░рд╛ рдЕрдк-рдлреНрд░рдВрдЯ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)
    • cmd.exe : ( ) @ { } # `
    • рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ ` рдРрд╕реЗ рдЪрд╛рд░реНрдЯ рд╕реЗ рдмрдЪрдиреЗред рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдЬреИрд╕реЗ, printf %s `@list.txt )ред

рдХреБрдЫ рд╣рдж рддрдХ рдПрдХ рд╡рд┐рдкрд░реАрдд рдЙрджрд╛рд╣рд░рдг:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреИрд╢ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд▓реЗрдВ:

# Bash
$ printf '"%s"\n' "3\" of snow"
"3" of snow"        # output

рдЬрдЧрд╣ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддрдп рдХреЗ рд╕рд╛рде, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ \" рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ "..." `" рд╕рд╛рде-рдпреБрдХреНрдд рддрд░реНрдХ рдХреЗ рдЕрдВрджрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП:

# PowerShell - WISHFUL THINKING
PS> printf '"%s"\n' "3`" of snow"
"3" of snow"        # output

рдпрд╣реА рд╣реИ, рдЖрдкрдХреЛ " '...' " рдЕрдВрджрд░ рдПрдореНрдмреЗрдбреЗрдб "..." рдЕрдВрджрд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП _PowerShell_ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдЖрдк рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ "" рдпрд╣рд╛рдБ рдХреЗ рд╕рд╛рде)ред

рдЙрдкрд░реЛрдХреНрдд iep рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рдлрд╝рд┐рдХреНрд╕ рдХреЛ рд▓рд╛рдЧреВ iep printf '"%s"\n' "3`" of snow" рдЗрдЪреНрдЫрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗред


рд╡рд░реНрддрдорд╛рди, рдЯреВрдЯреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдмрд╢ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реБрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреВрджрдирд╛ рд╣реЛрдЧрд╛ ( \ рд╕рд╛рде рднрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ _additional_ рд░рд╛рдЙрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ):

# PowerShell - messy workaround to compensate for the current, broken behavior.
PS> printf '\"%s\"\n' "3\`" of snow"
"3" of snow"        # output

рдЬрдЧрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рдЬреЛ рд▓реЛрдЧ рджрд┐рдП рдЧрдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди _as-is_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ _default рд╢реЗрд▓_ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ,

# PowerShell - WISHFUL THINKING
PS> sh -c @'
printf '"%s"\n' "3\" of snow"
'@
"3" of snow"  # output

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ --% рдЙрдкрдпреЛрдЧ _not_ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ( printf --% '"%s"\n' "3\" of snow" ), рдФрд░ рдпрд╣рд╛рдВ-рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди --% рд╕реАрдорд╛рдПрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди ( > ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ред

рдпрджрд┐ рдЖрдк рдПрдХ _double_-quoted рдпрд╣рд╛рдБ-рд╕реНрдЯреНрд░рд┐рдВрдЧ ( @"<newline>....<newline>"@ ) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк --% рд╕рд╛рде, _PowerShell рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди_ рднреА рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдорд╛рди рд▓рдХреНрд╖реНрдп рд╢реЗрд▓ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рддреЛрдбрд╝ рди рджреЗрдВред

рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП sh -c / cmd /c рдЬрд░реВрд░рдд рди рд╣реЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдЯрд┐рд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╣рд╛рдВ-рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ:

# PowerShell - WISHFUL THINKING
# Passes the string to `sh -c` / `cmd /c` for execution, as appropriate.
# Short alias: ins
PS> Invoke-NativeShell @'
printf '"%s"\n' "3\" of snow"
'@
"3" of snow"  # output

рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдк рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рджреЗрд╢реА рд╢реЗрд▓ рдХреЗ рдлреАрдЪрд░реНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЙрд▓реЗрдВ рдкреНрд▓реИрдЯрдлреЙрд░реНрдо [-family] -specific рд╣реЛрдВрдЧреА - рд╡реЗ _both_ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдпреВрдирд┐рдХреНрд╕-рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреАред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ PowerShell _alone_ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛, рдЗрд╕рдХреЗ _own рд╕рд┐рдВрдЯреИрдХреНрд╕_ рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ : рдпрд╣ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЕрдиреБрднрд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЕрдиреНрдп рдЧреЛрд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ- рд╣реИ; рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдореЗрдВ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдо рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдирдиреЗ рдХреА рдкреАрдбрд╝рд╛ рдХрдо рд╣реЛрдЧреА, рдФрд░ рдореИрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрдиреЛрдВ (рднреА) рдХреЗ рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред

  • рдЖрдкрдХреЛ \" рдХреЛ `" рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди _ "..." _ рдХреЗ рдЕрдВрджрд░ред

рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

# working everywhere but polluted with \
тЭп node -e 'console.log(\"hey\")'
hey

# working in Node:
тЭп node -e 'console.log(`"hey`")'
hey

# not working in Julia:
тЭп julia -e 'print(`"hey`")'
`hey`

# not working anywhere:
тЭп node -e "console.log(`"hey`")"
тЭп node -e "console.log("hey")"
тЭп node -e "console.log(""hey"")"
тЭп node -e 'console.log(""hey"")'

рдмреИрд╢ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛:

тЭп node -e 'console.log("hey")'
hey

рд╢рдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡:

рдпрджрд┐ PowerShell рдЯреАрдо рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рддреАрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реА рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддреА рд╣реИ, рддреЛ рдмрд╕ рдПрдХ рдмреИрд╢ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ `рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддрд░рд╣ рдмреИрд╢ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдмрдЪ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд╖реЗрдк рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИред

тЭп node -e `console.log("hey")`
hey

тЭп $a=hey 
тЭп node -e `console.log($hey)`
hey

рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдмреИрд╢ рдХреЗ рд▓рд┐рдП рдмреИрдХрдЯрд┐рдХреНрд╕ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ

рдмреИрдХрдЯрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреЛрд╕рд┐рдХреНрд╕ рд╢реЗрд▓ рдореЗрдВ рдмреИрдХрд╕реНрд▓реИрд╕ рдХреЗ рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдпред рдЖрдк рдЬрд┐рд╕ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИред рд╣рдордиреЗ ASCII рдХреЗ рд╕рднреА рд╕рд╛рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ $ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред


рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ...

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ MSVCR рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╣реИ ред "" рд╕рд╛рдорд╛рди рдЗрддрдирд╛ рдареЛрд╕ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ .NET рдХреЛ Unix рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдкрд░ CoreFX рдореЗрдВ рднреА рдбрд╛рд▓ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдпрд╣ рд╣рдореЗрд╢рд╛ рднрд╛рдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЬрдм рддрдХ рдХреЛрдИ рдЧреНрд▓реЛрдмрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рддрд╛ред

рд╡рд╣рд╛рдБ рднреА рд╣рд░ рдХрд┐рд╕реА рдХреА рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд░ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдХрдЪреНрдЪреА cmdline рдХреЗ рд▓рд┐рдП .NET рд╣реИред

рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдмреИрд╢ рдХреЗ рд▓рд┐рдП рдмреИрдХрдЯрд┐рдХреНрд╕ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ

рдмреИрдХрдЯрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреЛрд╕рд┐рдХреНрд╕ рд╢реЗрд▓ рдореЗрдВ рдмреИрдХрд╕реНрд▓реИрд╕ рдХреЗ рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдпред рд╣рдордиреЗ ASCII рдХреЗ рд╕рднреА рд╕рд╛рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

рдпрджрд┐ рдкрд╛рд░реНрд╕рд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рддреЛ рдпрд╣рд╛рдВ `рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИред '' рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@ рд╕реНрд╡рд╛рдореА рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рдЖрдк рдкреБрд░рд╛рдиреА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ Powershell 5.1 рдФрд░ 6+ рдкрд░:
https://github.com/PowerShell/PowerShell/issues/1995#issuecomment -56/34346

рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдкреЙрд╡рд░рд╢реЗрд▓ рел,рез рдФрд░ рд▓рд┐рдирдХреНрд╕ / рдореИрдХ рдкрд░ рем+ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИ, рдореЗрд░рд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдмрд┐рдирд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХрд┐ рдХреБрдмреНрддреЗрд▓, рд╣реЗрд▓реНрдо, рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдФрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдЬреИрд╕реЗ JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рднреАрддрд░ рд╡рд╕реНрддреБрдПрдВ:
https://github.com/choovick/ps-invoke-externalcommand

GitHub
GitHub рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдХрд░ choovick / ps-invoke-externalcommand рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░реЗрдВред

@choovick рдХреБрдЫ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдереЗ, рдореИрдВ рдЕрднреА рднреА рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд╣реЛрдЧрд╛ред рдпрд╣ PS рдореЗрдВ v3 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@AndrewSav @TSlivede рдХреЗ Run-Native рд╕рдорд╛рд░реЛрд╣ рдмрд╣реБрдд рдЪрд╛рд▓рд╛рдХ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдФрд░ рднрд╛рдБрддрд┐ рднреА _Windows PowerShell_ рдореЗрдВ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рдХреБрдЫ рдмрд╛рддреЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ: рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдСрдХреНрд╕ рдХреЛ рджреЗрдЦрддреА рд╣реИред commandlineargumentstring рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ (рд╢рд╛рдпрдж рд╣реА рдХрднреА, рдЕрдЧрд░ рдХрднреА, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛), рддрд░реНрдХ-рдХрдо рдЗрдирд╡реЛрдХреЗрд╢рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЖрд╕рд╛рдиреА рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рднреА рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ _with_ рддрд░реНрдХреЛрдВ, рдЬреЛ рдпрд╣ рд╣реИ рдХреЗ рд▓рд┐рдП рд╣реИ), _all_ рддрд░реНрдХреЛрдВ рдХреЛ рджреЛрд╣рд░реЗ-рдЙрджреНрдзреГрдд (рдЬреИрд╕реЗ, 42 рдХреБрдЫ "42" ) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ) рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдбрдмрд▓-рдХреЛрдЯреЗрдб (рдпрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдбрдмрд▓-рдХреЛрдЯреЗрдб) рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ msiexec рдХреЗрд╕ рдореЗрдВ) рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВред

@aminya , рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ node -e 'console.log(`"hey`")' (рдкреНрд░рдХрд╛рд░) рдХрд╛ рдХрд╛рд░реНрдп рд╡рд░реНрддрдорд╛рди, рдЯреВрдЯреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд╡рд╣ рдерд╛ _verbatim_ console.log("hey") , рдЬреЛ рдХрд┐, рдЕрдЧрд░ Windows рдкрд░ PowerShell рдиреЗ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдЪрд╛ рд▓рд┐рдпрд╛, рддреЛ рдЖрдк рдПрдХрд▓ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрдВрдЧреЗ: node -e 'console.log("hey")' ред рдпрд╣ _automatically_ рдХреЛ node -e "console.log(\"hey\")" (рдбрдмрд▓-рдХреЛрдЯрд┐рдВрдЧ, \ -рдкреНрд░рдХрд╛рд╢рд┐рдд рд╢рдмреНрджрд╢рдГ " ) рдХреЗ рджреГрд╢реНрдпреЛрдВ рдХреЗ рдкреАрдЫреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдХрдм рддрдХ рдмрди рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рджреЗрдВ:
рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХрднреА рднреА _PowerShell_ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ PowerShell рдХрд╛ рддрд░реНрдХ рдорд╛рди_ рд╣реИ рдХрд┐ рдкреЙрд╡рд░рд╕реЗрд╣реЗрд▓ рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдмрд╛рд╣реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо _as-is_ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PowerShell рдХрд╛ рдХрд╛рд░реНрдп _as рд╣реИред

  • рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП .NET рдХреЛрд░ рд╕рдкреЛрд░реНрдЯ рд╣реИ, рдРрд╕рд╛ рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдмрд┐рдЯрд┐рдо рд╡реИрд▓реНрдпреВрдЬрд╝ рдХреЛ рдХреЗрд╡рд▓ рдЙрддрдиреЗ рд╣реА рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ-рдЙрддрдиреЗ рд╣реА рддрд░реНрдХ рдХреЗ рддрддреНрд╡ рдХреЗ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ, рдЬреЛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЛ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ ред
  • рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдПрдХ _single рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди string_ (рдПрдХ рдЕрдлрд╕реЛрд╕рдЬрдирдХ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдп) рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдирд╛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛, рдареАрдХ рд╕реЗ рддрд░реНрдХ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдПрдХ рдлреНрд░реА-рдлреЙрд░-рдСрд▓ рд╣реИ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЙрди рдЬреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ), рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрдиреНрд╡реЗрдВрд╢рди (рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрдм рдЖрд░рдПрдлрд╕реА рдХреЛ рднреА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ) рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЗ рд╕реА / рд╕реА + + + рдХрдВрдкреНрд▓рд╛рдпрдВрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

    • _Update_: рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдХреЗ- рд╢рдмреНрджрд╢рдГ-рдЯреЛрдХрди рдХрд╛ рд▓рд╛рдн рд▓реЗ рд╕рдХрддреЗ ArgumentList рдХреА рд╕рдВрдкрддреНрддрд┐ System.Diagnostics.ProcessStartInfo рдиреЗрдЯ рдХреЛрд░ рдореЗрдВ: рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдареАрдХ рд╕реЗ рдЙрджреНрдзреГрдд рдФрд░ рднрд╛рдЧ рдирд┐рдХрд▓реЗ рдЖрджреЗрд╢ рдХреЛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рд╣реИ -рд▓рд╛рдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ; рд╣рд╛рд▓рд╛рдБрдХрд┐, _batch files_ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрднреА рднреА рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ - https://github.com/PowerShell/PowerShell-RFC/pull/90#issuecomment -552231174 рджреЗрдЦреЗрдВ

рдЙрдкрд░реЛрдХреНрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрднрд╡рддрдГ рдПрдХ рдСрдкреНрдЯ-рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдПрдХ рдЬрд░реВрд░реА рд╣реИ, рдЕрдЧрд░ рд╣рдо рд╕рднреА рдореМрдЬреВрджрд╛ рдХреЛрдЯреНрд╕рд┐рдВрдЧ рд╕рд┐рд░рджрд░реНрдж рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЖрддреЗ рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рд╡рд░рд╕реНрд▓реЗ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдЖрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпреВрдирд┐рдХреНрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВред


рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗ рд▓рд┐рдП node -e 'console.log(`"hey`")' : рдЕрдВрджрд░ '...' , рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ ` - рдЬрдм рддрдХ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ-рд╣реИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ PowerShell рд╡рд░реНрддрдорд╛рди рдореЗрдВ _does't_ verbatim " char рд╕реЗ рдмрдЪрддрд╛ рд╣реИред рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХ рдореЗрдВ \" рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ, рдХреНрдпрд╛ node рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рджреЗрдЦрддрд╛ рд╣реИ console.log(`"hey`") рд╣реИ, рдЬреЛ рджреЛ рд╕реАрдзреЗ рдЖрд╕рдиреНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЧреИрд░ рдЙрджреНрдзреГрдд console.log(` рдФрд░ рдбрдмрд▓-рдЙрджреНрдзреГрдд "hey`" ред " рдЫреАрдирдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ _syntactic_ рдлрд╝рдВрдХреНрд╢рди \ -рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЕрдВрддрддрдГ console.log(`hey`) , рдФрд░ рд╡рд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ `....` рд╕рдВрд▓рдЧреНрди рдЯреЛрдХрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдПрдХ рд░реВрдк рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ _template рд╢рд╛рдмреНрджрд┐рдХ_ред

@AndrewSav рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд╛рдЧрд▓ рдкрд░реАрдХреНрд╖рдг рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ! рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди, рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╡рд┐рдВрдбреЛрдЬ 5.1 рдФрд░ рдкреАрдПрд╕ 7 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореИрдВ рд╕рдм рдХреБрдЫ рдбрдмрд▓ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рдореИрдВ msiexec рдпрд╛ sqlcmd рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ " рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рд╕рд░рд▓ рдПрд╕реНрдХреЗрдк рд▓реЙрдЬрд┐рдХ рднреА рд╣реИ: https://github.com/choovick/ps-invoke-externalcommand/blob/master/ExternalCommand/ExternalCommand.psm1##278

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░ STDOUT рдФрд░ STDERR рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдЧреБрдЪреНрдЫрд╛ рд▓рд┐рдЦрд╛ рд╣реИ ... рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА ...

@ mklement0 рдпрд╣ рдзрд╛рдЧрд╛ рдХрднреА рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ (: рд╣рдореЗрдВ рдпрд╛ рддреЛ ps рдЧреИрд▓рд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд PowerShell рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реВрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдЧрд╛рдореА рд╢реЗрд▓ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛ред

GitHub
GitHub рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдХрд░ choovick / ps-invoke-externalcommand рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░реЗрдВред

@ mklement0 рдпрд╣ рдзрд╛рдЧрд╛ рдХрднреА рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ (: рд╣рдореЗрдВ рдпрд╛ рддреЛ ps рдЧреИрд▓рд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд PowerShell рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реВрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдЧрд╛рдореА рд╢реЗрд▓ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛ред

рдпрджрд┐ PowerShell рдЯреАрдо рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЦреБрдж рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреА рд╣реИ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рд╢реЗрд▓ рдЬреЛ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдореЗрд░реА рдкрд╕рдВрдж рдХрд╛ рд╢реЗрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛! рдпреЗ рдореВрд▓ рд╕рд╛рдорд╛рди рд╣реИрдВ рдЬреЛ рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕реЗ рдЧрд╛рдпрдм рд╣реИрдВред

@ рдпрд╛рдорд┐рдпрд╛ рдЬреА , рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЦреБрдж рдХреЛ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрдм рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд▓реЗрдХрд┐рди рдиреАрдЪреЗ рдХреА рддрд░рд╣ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдиреЗ рдЗрд╕реЗ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдмрдирд╛ рджрд┐рдпрд╛ред

  • рд▓рдЪреАрд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд░реВрдкрд░реЗрдЦрд╛, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп CMDlets рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
  • рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕рдВрдЧрдарди рдореЗрдВ рдЖрдо рддрд░реНрдХ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдФрд░ рдХреЛрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХреЗрдВрджреНрд░реАрдХрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдХреНрд░реЙрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдоред рдореЗрд░реЗ рдкрд╛рд╕ рдкреАрдПрд╕ 5.1 рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЕрдкрдиреЗ рдЙрдкрдХрд░рдг рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд╣реИрдВ, рдФрд░ рдкреАрдПрд╕ 6/7 рдореЗрдВ рд▓рд┐рдирдХреНрд╕ / рдореИрдХ рдкрд░

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкреАрдПрд╕ рдЯреАрдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдХрдо рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧреАред

рдЙрдкрд░реЛрдХреНрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрднрд╡рддрдГ рдПрдХ рдСрдкреНрдЯ-рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ https://github.com/PowerShell/PowerShell-RFC/pull/90 рд▓рд╛рдЧреВ рдХрд░рдирд╛

@ рд╕реНрд╡рд╛рдореА , рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдмреБрд▓рд╛рдирд╛ рдПрдХ рдЦреЛрд▓ рдХрд╛ рдореБрдЦреНрдп рдЬрдирд╛рджреЗрд╢ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@Choovick рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓, рдЕрднреА рднреА _Windows PowerShell_ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛-рдорд╣рддреНрд╡рдкреВрд░реНрдг-рдлрд┐рдХреНрд╕-рдУрдирд▓реА рдореЗрдВрдЯреЗрдиреЗрдВрд╕ рдореЛрдб рдореЗрдВ рд╣реИред
рдкреВрд░рдХ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ / рдЬрдм рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡реИрдЪрд╛рд░рд┐рдХ рд╕рд╣рд╛рдпрддрд╛ рд╡рд┐рд╖рдп рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - https://github.com/MicrosoftDocs/PowerShell-Docs/issues/5152 рджреЗрдЦреЗрдВ - рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ / Windows PowerShell's рдКрдкрд░ @TSlivede рдЬреИрд╕реЗ рдХрд┐ рд╕реАрдзреЗ рд╡рд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@iSazonov рд╣рд╛рдБ, https://github.com/PowerShell/PowerShell-RFC/pull/90 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИред

рдЬреИрд╕реЗ рдХрд┐ рдзрд╛рдЧрд╛ рдХрднреА рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрддрд╛ рдФрд░ рдЯреВрдЯрддреА-рдмрджрд▓рддреА рдЪрд┐рдВрддрд╛рдПрдВ:

рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП RFC рдХреА рдЕрдВрддрд┐рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ @joeyaiello рджреНрд╡рд╛рд░рд╛ 8 рдЬреБрд▓рд╛рдИ 2019 (

рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ [RFC] рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдФрд░ рдЗрд╕рдХреЗ рдЯреВрдЯрдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ рдЖрдЬ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рд╣рдо рд░реЗрдЦрд╛ рдХреЗ рдиреАрдЪреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдСрдкреНрдЯ-рдЗрди рдмрдирд╛рдо рдСрдкреНрдЯ-рдЖрдЙрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ , рдХреНрдпрд╛ рдХреБрдЫ рд╕рдВрдХреНрд░рдордг рд╣реИ рдкрде, рдФрд░ рдпрджрд┐ рдПрдХ рд╡рд░реАрдпрддрд╛ рдЪрд░ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрдВрддреНрд░ рд╣реИред

_Personally_, рдореИрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдиреВрдВрдЧрд╛ред рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ; RFC рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк _old_ (рдЯреВрдЯрд╛ рд╣реБрдЖ) рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдСрдкреНрдЯ-рдЗрди рд╕реБрдЭрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдкрддреНрддрд┐ рд╣реЛрдЧреА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдореМрдЬреВрджрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░реЗрдВрдЧреЗ_ - рдКрдкрд░ рджреЗрдЦреЗрдВ - рдФрд░ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрднреА рднреА рд▓рдХреНрд╖реНрдп рдмрдирд╛рдирд╛ рд▓рдЧрддрд╛ рд╣реИред

рдпрджрд┐ рдирдпрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдСрдкреНрдЯ-рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдЬреАрдмрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореМрдЬреВрджрд╛ рдХреЛрдб рдирд╣реАрдВ рдЯреВрдЯреЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдСрдкреНрдЯ-рдЗрди рддрдВрддреНрд░ рд╕реНрд╡рдпрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ:
рдЕрдм рдЬрдм @KirkMunro рдХреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ RFC рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдПрдХ _preference variable_ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдЪреБрдиреМрддреА рд╣реИ PowerShell рдХрд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕реНрдХреЛрдкрд┐рдВрдЧ: рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдХреЛрдб рдХреЛ рдЙрд╕ рд╕реНрдХреЛрдк рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдСрдкреНрдЯ-рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдм рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╡рд░реАрдпрддрд╛ рдЪрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд░реАрд╕реЗрдЯ рди рд╣реЛ рдЬрд╛рдП)ред

рдпрд╣рд╛рдБ рдСрдкреНрдЯ-рдЗрди рдХреЗ _Lexical_ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдХрдареЛрд░ рдореЛрдб рдХреЗ _lexical_ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП RFC рдПрдХ using рдХрдерди (рдЬреЛ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдорддреМрд░ рдкрд░ _dynamically_ sceded) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдХреЛрдкреНрдб рд╕реБрд╡рд┐рдзрд╛ (рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдп) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рдж, рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ using ProperExternalArgumentQuoting рдХрдерди (рдирд╛рдо рдПрдХ WIP :) рд╣реИ - рдпрджрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ - рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рд╣рдореЗрдВ (рдлрд┐рд░ рд╕реЗ) рддреМрд▓рдирд╛ рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдарддреЗ рд╣реА рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдВред @ SteveL-MSFT?


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ --% 7.1 рдКрдкрд░ рджреЗрдЦреЗрдВ) рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреАрдЫрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ - рдКрдкрд░ рдФрд░ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджреЗрдЦреЗрдВ ), рдПрдХ _separate_ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреА - рдкреЙрд╡рд░рд╣реЗрд▓ рдХрд╛ рдореВрд▓ рдлрд┐рдХреНрд╕рд┐рдВрдЧ (рдЧреИрд░-рдЕрдиреБрдХрд░рдг) рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рдЬрд░реВрд░реА рд╣реИред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдиреВрдВрдЧрд╛, рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ; RFC рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдкреБрд░рд╛рдиреЗ (рдЯреВрдЯреЗ рд╣реБрдП) рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдСрдкреНрдЯ-рдЗрди рд╕реБрдЭрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдирдпрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдСрдкреНрдЯ-рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдЬреАрдмрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдореМрдЬреВрджрд╛ рдХреЛрдб рдирд╣реАрдВ рдЯреВрдЯреЗрдЧрд╛ред

рд╕рд╣рдордд, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдпрд╣ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЯреВрдЯреА рд╣реБрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕рдордЭ рд╣реИ, рдлрд┐рд░ рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдбрд┐рдлрд╝реЙрд▓реНрдЯред рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЧ рд╣реИ , рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдСрдкреНрдЯ-рдЗрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдСрдкреНрдЯ-рдЖрдЙрдЯ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреВрдЯреА рд╣реБрдИ рдмрд╛рд╣рд░реА рд╢реЗрд▓ рдХреЙрд▓ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯрдиреЗ рдХрд╛ рдЦрддрд░рд╛ рд╣реИ рддрд░реАрдХреЗред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, PowerShell 7 рдХреЛ рд╡рд┐рд░рд╛рд╕рдд Windows PowerShell рдкрд░ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рд╕реНрдЯреАрд╡рдПрд▓-рдПрдордПрд╕рдПрдлрдЯреА рдФрд░ рдореИрдВ рд╕рд╣рдордд рдерд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ # 13068 рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдпрд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рднреА рдЫреВрддреЗ рд╣реИрдВ рд╡рд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдПрдХ рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдСрдкреНрдЯ-рдЗрди рдореЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ # 13068 рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдЧрд╛: рдпрджрд┐ рдЙрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХрд┐рд╕реА рднреА рдореВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдЪрд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг, @JustinGrote рдиреЗ рдЙрд╕ рдереНрд░реЗрдб рдореЗрдВ рджрд┐рдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рддрд░реНрдХ рдкреЗрд▓реЛрдб рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЙрджреНрдзрд░рдг рд╕рдВрднрд╡ рд╣реИ) рдФрд░ рдЙрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдХреБрдЫ рднреА рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред

@joeyaiello рдХреНрдпрд╛ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рддрдм рддрдХ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рди рд╣реЛ рдФрд░ рдХреЛрдИ рдпрд╣ рджрд┐рдЦрд╛ рд╕рдХреЗ рдХрд┐ рдЙрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреБрдЫ рднреА рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?

рдУрд╣ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдХреНрдпрд╛? рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдмреЗрд╡рдХреВрдлреА рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдкрд░ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреИрд╕реЗ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХреЛрдИ рдЗрддрд┐рд╣рд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддрд░реНрдХ рджреЗрдирд╛ рд╣реИред рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП system() рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирдП рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ Matlab рдХреА рддрд░рд╣ calc.exe рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдЕрдВрдХрдЧрдгрд┐рдд рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • Pwsh рдЯреАрдо рдПрдХ рдирдП рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рддреА рд╣реИ рдЬреЛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╕рд╛рдорд╛рди рдХреЛ рдареАрдХ рдХрд░рддреА рд╣реИ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд cmdlet рдХреЗ рдкреАрдЫреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреА рд╣реИред
  • рд╕реНрдЯреЙрдк-рдЧреИрдк рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЧрд╛рдореА pwsh рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд cmdlet рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд╛рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирдП, рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╡рд╣реА Start-Process рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ -QuotingBehavior Legacy ... рдЬреИрд╕реЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде "рдирдП" cmdlet рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред) # 13089 рджреЗрдЦреЗрдВред

рдкреЙрд╡рд░рд╢реЗрд▓ рдЗрди рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реА рд╣реИ? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдбрдмрд▓-рдХреЛрдЯреНрд╕ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╡рд╛рд▓реЗ рдЖрд░реНрдЧреНрд╕ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред

рдореБрдЭреЗ v.7 рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВред рддрдп рд▓рдЧ рд░рд╣рд╛ рд╣реИред

PING 'A \"B'

рдкрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдореЗрдЬрдмрд╛рди рдП "рдмреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред

PING 'A\" B'

рдкрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдореЗрдЬрдмрд╛рди рдП "рдмреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢рдмреНрджрд╢рдГ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ ping рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП A \"B рдФрд░ A\" B - _with_ \ рд╡рд░реНрдгред

PowerShell, рдПрдХ рд╢реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, _its_ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдХреЗрд╡рд▓ - рдФрд░ рдлрд┐рд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╣реА рд╡рд░реНрдмрд┐рдЯрд┐рдо рдорд╛рди рджреЗрдЦрддреА рд╣реИ рдЬреЛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рдЕрдкрдиреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдереЗред

рд╡рд╣ _other_ рдЧреЛрд▓реЗ - рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗ рдШрдЯрд┐рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЙрдирдХреЗ рдЦреБрдж рдХреЗ рдЦреЛрд▓ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдмреЛрд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ, _command line_ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдкрд╛рд╕ рдХреА рдЧрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рджрд▓реАрд▓реЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП - \ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЪрд░рд┐рддреНрд░ рдХреЛ рдпрд╣рд╛рдВ рдЪрд┐рддреНрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╣ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ (рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдЖрдк рд╕реАрдзреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╢рдмреНрджрд╢рдГ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ) рдПрдХ рд╢реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рдХрд╛рдо рд╣реИ, рджреГрд╢реНрдпреЛрдВ рдХреЗ рдкреАрдЫреЗ _ред

рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ, рдкреЙрд╡рд░рд╢реЗрд▓ рдХреА рддрд░рд╣ рд╣реА " _inside '...' _ (рдПрдХрд▓-рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕) рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рди рд╣реА POSIX- рд╕рдВрдЧрдд рдЧреЛрд▓реЗ рдЬреИрд╕реЗ bash : bash рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /bin/echo 'A \"B' (рд╕рдордЭрджрд╛рд░реА рд╕реЗ) A \"B ( \ рдХреЛ рдПрдХрд▓-рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) - рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ PowerShell (рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ) рдкреИрджрд╛рд╡рд╛рд░ рд╕реЗ рдмрд╣реБрдд рд╣реА рдХрдорд╛рдВрдб
A "B - \ рдЧрд╛рдпрдм рд╣реИ - рдпрд╣рд╛рдБ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рдХрдЯреАрдХрд░рдг рд╣реИред

рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдЕрдВрддрддрдГ A "B _verbatim_ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЖрдкрдХреЛ PowerShell рд╕реЗ 'A "B' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  • рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЬреЛ рдкрд╛рд╡рд░рд╕реНрд▓реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИ, рдореЗрдВ "A "B" - рдЬрд┐рд╕реЗ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ A B рд░реВрдк рдореЗрдВ рджреЗрдЦрддреА рд╣реИ - рдЕрд░реНрдерд╛рдд, " _ "..." рдореЗрдВ рдЕрдВрдзрд╛ рд╕рдВрд▓рдЧреНрдирдХ, _embedded_ " рдмрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛ред " рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдиреБрдХрд╕рд╛рди рд╣реБрдЖред PowerShell _should_ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреАрдЫреЗ рдХреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ "A \"B" - рдпрд╛рдиреА, рдПрдореНрдмреЗрдбреЗрдб " \ -рд╕реБрд░рдХреНрд╖рд╛ред

  • рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдПрдХ рд╣реА рдЕрдВрдзреЗ рдмрд╛рдбрд╝реЗ рдХреЗ рдкреАрдЫреЗ 'A \"B' "A \"B" рдХрд╛ рдмреИрдХ-рдж-рд╕реАрди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ _embedded_ \" рдХреЛ _escaped_ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред " рдЪрд░рд┐рддреНрд░, рдЬреЛ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕рд▓рд┐рдП A "B рд░реВрдк рдореЗрдВ рджреЗрдЦрддреА рд╣реИ; рдпрд╣реА рд╣реИ, _automatic_ рдмрдЪрдиреЗ рдХреА рдХрдореА рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдореНрдмреЗрдбреЗрдб \ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдиреБрдХрд╕рд╛рди рд╣реБрдЖред PowerShell _should_ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреАрдЫреЗ рдХреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ "A \\\"B" - рдЕрд░реНрдерд╛рдд \ рдФрд░ " рднрд╛рдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢рдмреНрджрд╢рдГ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ ping рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП A \"B рдФрд░ A\" B - _with_ \ рд╡рд░реНрдгред

"рдпрд╣" рдпрд╣рд╛рдВ рдЙрджреНрдзреГрдд рд╢рд┐рдХрд╛рдпрдд рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

@ yecril71pl , рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ: рдореЗрд░реА (рдЧрд▓рдд) рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ "рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдбрдмрд▓-рдХреЛрдЯреНрд╕ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдЖрд░реНрдЧрди" рд╕реЗ рддрд╛рддреНрдкрд░реНрдп рдПрдореНрдмреЗрдбреЗрдб " рдФрд░ \ рдЕрдХреНрд╖рд░_ рд╕реЗ рдмрдЪрдиреЗ рд╕реЗ рд╣реИред рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдФрд░ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЬрдбрд╝ рд╣реИред

PowerShell Core рдореЗрдВ рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ рд╣реБрдП рд╣реИрдВ рдЬреЛ Windows PowerShell рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ; рдореИрдВ рдЕрднреА рдХреЗрд╡рд▓ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ:

  • Windows PowerShell \ : 'A B\' рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ (рдЯреВрдЯрд╛ рд╣реБрдЖ) "A B\" - PS Core рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдВрдзрд╛ рдбрдмрд▓-рдХреЛрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ ( "A B\\" ) рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд░реЗрдкреЛ рдХреЗрд╡рд▓ рдкреАрдПрд╕ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдкреАрдПрд╕ рдХреЛрд░ рдореЗрдВ рдЕрднреА рднреА рдХреНрдпрд╛ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ (рдпрд╣ рдорддрднреЗрджреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ _ рдПрдХ рддрд░рдл _ рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рдкрд╣рд▓реВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ)ред


рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп рдЬреЛ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдерд╛ _is_ рдЕрднреА рднреА PS рдХреЛрд░ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ _if рдЖрдк рддрд░реНрдХ рд╕реЗ \ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ:

рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ 'A" B' рдкрд░рд┐рдгрд╛рдо _non_-double-quoted A" B рджреГрд╢реНрдпреЛрдВ рдХреЗ рдкреАрдЫреЗ рд╣реИ (рдЬрдмрдХрд┐ 'A\" B' рдкрд░рд┐рдгрд╛рдо "A\" B" - рдЬреЛ рднреА рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╣реИ) - рдХреЗрд╡рд▓ рдЕрд▓рдЧ рдврдВрдЧ рд╕реЗ)ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд░реЗрдкреЛ рдХреЗрд╡рд▓ рдкреАрдПрд╕ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдкреАрдПрд╕ рдХреЛрд░ рдореЗрдВ рдЕрднреА рднреА рдХреНрдпрд╛ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ (рдпрд╣ рдорддрднреЗрджреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ _ рдПрдХ рддрд░рдл _ рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рдкрд╣рд▓реВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ)ред

рдореЗрдЯрд╛ рдПрдХ рддрд░рдл: рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╣рдо рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдЦрд╛рд░рд┐рдЬ рдХрд░ рд╕рдХрддреЗ рдереЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдерд╛ред рдХреБрдВрдЖред рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдкрддреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдирд╛ рдЕрднреА рднреА рдмреЗрд╣рддрд░ рд╣реИред IMHOред

рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реЗ _asides_ рдХреЛ _рдкреНрд░реЛрдкрд░ рдлреНрд░реЗрдорд┐рдВрдЧ рдФрд░ рд╕рдВрджрд░реНрдн_ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ looooong рдереНрд░реЗрдб рдореЗрдВ рдЬрд╣рд╛рдВ рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА - рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ - рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рдереА рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдм _hidden рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ (рдпрд╣ рдХрднреА рджрд░реНрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _link_ рдХреЛ рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрди рдЪрд░реНрдЪрд╛рдУрдВ рд╕реЗ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд┐рддрд┐ рдХреЗ рдирд┐рд░реНрдгрдп рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЯреИрдЧ рджреЗрдЦреЗрдВ: Resolution- won't fix. рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ PowerShell рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд (MIT) рд╣реИ, рд╕рдореБрджрд╛рдп рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдХрд╛рдВрдЯреЗ рдореЗрдВ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ PowerShellCommunity ( pwshc ) рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдкрд┐рдЫрдбрд╝реА рдЕрдиреБрдХреВрд▓рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ PowerShell 8 рдореЗрдВ, рд╕рдорд┐рддрд┐ рдХрд╛рдВрдЯрд╛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреА рд╣реИред

рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: PowerShell рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреНрд░реАрдЗрдВрд╕реНрдЯреЙрд▓реНрдб рдирд╣реАрдВ рдЖрддреА рд╣реИ, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП, PowerShellCommunity рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХрдард┐рдирд╛рдИ PowerShell ред рдореИрдВ рдХреБрдЫ рднрд╡рд┐рд╖реНрдп рдХреЗ 8 рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ (рдпрд╛ рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ) рдХреЗ рдмрдЬрд╛рдп рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

рдЪреВрдВрдХрд┐ рд╕рдорд┐рддрд┐ рдиреЗ рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рддрдиреА рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдП рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп Invoke-Native рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рд╡рд┐рд░реБрджреНрдз Microsoft рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдмрдЪрд╛рдирд╛ рд╕рдореБрджрд╛рдп рдХрд╛ рдХрд╛рдо рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдЬрд╛рдирдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рддрдиреА рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдП рд╣реИрдВ

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ - рднрд▓реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордп рдкрд░ рдорджрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд┐ рдЪреАрдЬреЗрдВ рд╕рд╣реА рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ _ рд╕рд┐рджреНрдзрд╛рдВрдд, рдпрджрд┐ рдФрд░ рдЬрдм рд╕рдордп рдЖрддрд╛ рд╣реИ_ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рднрд▓реЗ рд╣реА рдЙрд╕ рд╕рдордп _never_ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрддрд╛ рд╣реЛред

рд╕рдореБрджрд╛рдп Invoke-Native рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛:

  • Invoke-NativeShell рддрд░рд╣ рдХреБрдЫ рдПрдХ _different рдпреВрдЬрд╝ рдХреЗрд╕_ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЬреЛ рдХрд┐ # 13068 рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ - рдФрд░ рдЙрд╕ рдХреЗрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХрд╛ cmdlet _not_ рдПрдХ рд╕реНрдЯреЙрдкрдЧреИрдк рд╣реИ: рдпрд╣ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ - рджреЗрдЦреЗрдВ https://ithithub.com/ PowerShell / PowerShell / рд╕рдорд╕реНрдпрд╛рдПрдВ / 13068 # рдЬрд╛рд░реА рдХрд░рдирд╛ -656781439

  • _This_ рдореБрджреНрджрд╛ _PowerShell рд╕реНрд╡рдпрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ_ (рдпрд╣ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-_native_ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ), рдФрд░ _stopgap_ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрдо-рд╕рдорд╛рд░реЛрд╣-рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ _opt-in_ - рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди iep рдХреЛ рдЬрд╣рд╛рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдорд┐рдд

Microsoft рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдмрдЪрд╛рдирд╛ рд╕рдореБрджрд╛рдп рдХрд╛ рдХрд╛рдо рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ @aminya рдХреА рдЪрд┐рдВрддрд╛ рдХрд┐рд╕реА рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ - рдпрд╣ рдПрдХ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЯреВрдЯреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдПрдХ рд╢реЗрд▓ рдХрд╛ рдореВрд▓ рдЬрдирд╛рджреЗрд╢ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдлреЛрд░реНрдХ рдХреЗ рд╕рд╛рде рдкрд╛рд╡рд░рд╢реЗрд▓ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЯреБрдХрдбрд╝реЗ рдХрд░рдирд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп рдХреЗрд╡рд▓ рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ:

рдХреНрдпрд╛ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рддрдм рддрдХ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рди рд╣реЛ рдФрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдпрд╣ рджрд┐рдЦрд╛ рд╕рдХреЗ рдХрд┐ рдЙрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреБрдЫ рднреА рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛, рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рдореЗрдВ рдХрд╣рд╛ рд╣реИ, рджреЗрд╢реА рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ UX рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛
рдЗрд╕реА рд╕рдордп, рдпрд╣рд╛рдВ рдкреВрд░реА рдЪрд░реНрдЪрд╛ рджреЗрд╢реА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рд░реЛрдХрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред рд╣рдордиреЗ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╡рд┐рдирд╛рд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЗрд╕реЗ рддреМрд▓рдирд╛ред

рдЖрдЗрдП рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рджреЗрдЦреЗрдВред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирдП PowerShell рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдореВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ред рд╡рд╣ рдХреНрдпрд╛ рдХрд╣реЗрдЧрд╛? рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡рд╣ рдХрд╣реЗрдЧрд╛ - "рдзрдиреНрдпрд╡рд╛рдж - рдЕрдВрдд рдореЗрдВ рдореИрдВ рдмрд╕ рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!"ред

рдЖрдЗрдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди / рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░рд┐рджреГрд╢реНрдп рджреЗрдЦреЗрдВред рдХрд┐рд╕реА рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд┐рд╕реА рдПрдХ рдорд╛рдореВрд▓реА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рднреА) рдХрд┐рд╕реА рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣рдо рд╣рдореЗрд╢рд╛ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:

  • рдЕрджреНрдпрддрди рд░реЛрд▓рдмреИрдХ рдХрд░реЗрдВ
  • рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдлрд╛рд╕реНрдЯ рдлрд┐рдХреНрд╕ рддреИрдпрд╛рд░ рдХрд░реЗрдВ
  • рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рддрдм рддрдХ рддреЛрдбрд╝рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпреЗ рдЪреАрдЬреЗрдВ рддрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдпрд╛ рд╡реЗ рд╕реНрд╡рдпрдВ рд╕рдордп рдХреЗ рд╕рд╛рде рдорд░ рдЬрд╛рддреЗ рд╣реИрдВред

_Since рд╕рдВрд╕реНрдХрд░рдг рдЕрджреНрдпрддрди рд╣рдореЗрд╢рд╛ рдХреБрдЫ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ ред_

(рдореИрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрднреА PowerShell Core рд╡рд┐рдВрдбреЛрдЬ рдХрд╛ рдПрдХ рдШрдЯрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реАрдзреЗ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдзреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИрдВред)

рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЗрд╕рди рдиреЗ рдКрдкрд░ рдХреНрдпрд╛ рдХрд╣рд╛ рдерд╛ - рдпрд╣ рдПрдХ рдмрдЧ рдлрд┐рдХреНрд╕ рд╣реИред
рдЖрдЗрдП рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ powershell-y рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рдореЗрдВ рдХрд╣рд╛ рд╣реИ, рджреЗрд╢реА рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ UX рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЧрд▓рдд рджрд┐рд╢рд╛ рд╣реИред

рдЬрдЯрд┐рд▓рддрд╛ тЭУ

рдЖрдЗрдП рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рджреЗрдЦреЗрдВред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирдП PowerShell рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдореВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ред рд╡рд╣ рдХреНрдпрд╛ рдХрд╣реЗрдЧрд╛? рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡рд╣ рдХрд╣реЗрдЧрд╛ - "рдзрдиреНрдпрд╡рд╛рдж - рдЕрдВрдд рдореЗрдВ рдореИрдВ рдмрд╕ рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!"ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ: рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ PowerShell рдХреЛ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреЗрддреЗ рд╣реИрдВ, рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░рд╣рд╕реНрдпрдордп рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рд░реАрд╕рд╛рдпрдХрд▓ рдмрд┐рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдХрднреА рд╡рд╛рдкрд╕ рди рдЖрдПрдВред рдореИрдВ рдЗрд╕реЗ рд╣реА рдХрд░реВрдВрдЧрд╛ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдлрд╛рд╕реНрдЯ рдлрд┐рдХреНрд╕ рддреИрдпрд╛рд░ рдХрд░реЗрдВ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╣рд╕реНрдпрдордп рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рдкреВрд░реА рдЪрд░реНрдЪрд╛ рдмрд╕ рдЗрд╕ "рд░рд╣рд╕реНрдпрдордп рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдлрд▓" рд╣реЛрдиреЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдФрд░ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдирдИ рд░рд╣рд╕реНрдпрдордп рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдВ рдкреВрд░реА рдЪрд░реНрдЪрд╛ рд╕рд┐рд░реНрдл рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдФрд░ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдирдИ рд░рд╣рд╕реНрдпрдордп рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рд╣реИред

рд╣рдо рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдкреБрд░рд╛рдиреЗ рдЖрд╣реНрд╡рд╛рди cmdline рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рдирд╣реАрдВ рд╣реИ рдпрд╛ рддреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдХреНрдд рдХреНрд╖рдорддрд╛ рдЕрднреА рднреА -% рдХреЗ рд╕рд╛рде рдмрд░рдХрд░рд╛рд░ рд░рд╣реЗрдЧреАред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдХреНрдд рдХреНрд╖рдорддрд╛ рдЕрднреА рднреА -% рдХреЗ рд╕рд╛рде рдмрд░рдХрд░рд╛рд░ рд░рд╣реЗрдЧреАред

--% рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реАрдорд┐рдд рд╣реИред

@ yecril71pl

рд╣рдо рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @iSazonov рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдХреЗ рд╡реНрдпрд╡реНрд╣рд╛рд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛, рдЕрд░реНрдерд╛рдд рдмрдЧ рдХреЛ рдареАрдХ рд╕реЗ рдареАрдХ рдХрд░рдирд╛ (рдмрд┐рдирд╛ рдСрдкреНрдЯ-рдЗрди рдХреЗ рдмрд┐рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕), рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рддреЛрдбрд╝рдирд╛ред рд╕рд╣реА рд╣реИ, @iSazonov?

@ рдЖрд░реНрдЯреЛрд░рд┐рдпрд╛ 2

рдкреБрд░рд╛рдиреЗ рдЖрд╣реНрд╡рд╛рди cmdline рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рдирд╣реАрдВ рд╣реИ рдпрд╛ рддреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

[_Update_: рдореИрдВрдиреЗ рдЙрджреНрдзреГрдд рдкрдВрдХреНрддрд┐ рдХреЛ рдЧрд▓рдд рдмрддрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЕрднреА рднреА рд░реВрдЪрд┐ рд╣реИред]

  • рдЖрдкрдХреЗ рдкрд╛рд╕ _guess_ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдирд┐рдпрдо рд╕рд░рд▓ рд╣реИ:

    • _Only if_ рдЖрдкрдХрд╛ рдХрдорд╛рдВрдб рдирд╛рдо рдпрд╛ рдкрде _quoted_ - '/foo bar/someutil 'рд╣реИ - рдФрд░ / рдпрд╛ рдЬрд┐рд╕рдореЗрдВ _variable рд╕рдВрджрд░реНрдн (рдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ) рд╣реИрдВ - $HOME/someutil - & _re_ired_ рд╣реИред
  • рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдЗрд╕ рдЬрд╝рд░реВрд░рдд рдХреЛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдкреЙрд╡рд░рд╢реЗрд▓ рднрд╛рд╖рд╛ рдХреЗ рдмрд╣реБрдд рджрд┐рд▓ рдореЗрдВ рд╣реИ, рдФрд░ рджреЛ рдореВрд▓рднреВрдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЛрдб, рддрд░реНрдХ рдореЛрдб рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЛрдб рдХреЗ рдмреАрдЪ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рднреЗрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

    • рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ _external рдкреНрд░реЛрдЧреНрд░рд╛рдо_ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ; рдпрджрд┐ рдХрд┐рд╕реА рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ / рдЪрд░ рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА PowerShell рдХрдорд╛рдВрдб рдХреЛ рднреА рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП & рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рд░рд▓ рдирд┐рдпрдо рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рд░рд▓ рдирд┐рдпрдо рдпрд╣ рд╣реИ: _always_ & , рдФрд░ рдЖрдк рдареАрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ - рдпрд╣ _not_ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЫреЛрдЯреА рд╣реИ) --% , рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЧрд▓рдд рд╕рдорд╛рдзрд╛рди рд╣реИ - рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)

рдЙрдХреНрдд рдХреНрд╖рдорддрд╛ рдЕрднреА рднреА% рдХреЗ рд╕рд╛рде рдмрд░рдХрд░рд╛рд░ рд░рд╣реЗрдЧреАред

[_Update_: рдореИрдВрдиреЗ рдЙрджреНрдзреГрдд рдкрдВрдХреНрддрд┐ рдХреЛ рдЧрд▓рдд рдмрддрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЕрднреА рднреА рд░реВрдЪрд┐ рд╣реИред]

рдирд╣реАрдВ, _this_ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде # 13068 рдХреЗ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдЯрдХрд░рд╛рд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж, --% - _its_ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, _its_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдореЗрд╢рд╛ _platform-specific_ syntax - рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореБрджреНрджреЗ рдкрд░ рд╣рд╛рде рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рднреНрд░рдо рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ ред

--% рдПрдХ рдмрд╣реБрдд рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рдЗрд╕рдХреА рдЧрдВрднреАрд░ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ; рдЕрдЧрд░ рд╡рд╣рд╛рдБ рдХреБрдЫ рд╣реИ, рддреЛ (рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП) _operator_ рд╢реБрд░реВ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рджреЗрд╢реА рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдмрд╛рдЗрдЯрд┐рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ (рдЬреЛ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА sh -c '...' рд╕рд╛рде рдЦреБрдж рдХреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдпреВрдирд┐рдХреНрд╕ рдкрд░ cmd /c '...' , рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдореБрджреНрджрд╛ рддрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреЗрд╡рд▓ рддрднреА рдордЬрдмреВрдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рдЗрдирд░реА Invoke-NativeShell / ins cmdlet рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬрдмрдХрд┐ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓рдХреНрд╖реНрдп рд╢реЗрд▓ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ред рд╕реАрдПрд▓рдЖрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕, рд╣рд╛рде рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪ рдЬрд╛рдПрдЧрд╛ ( System.Diagnostics.ProcessStartInfo.ArgumentList рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрдкрдпреЛрдЧ рдХреЗ рджреНрд╡рд╛рд░рд╛), рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

@ yecril71pl

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ: рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ PowerShell рдХреЛ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреЗрддреЗ рд╣реИрдВ, рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░рд╣рд╕реНрдпрдордп рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рд░реАрд╕рд╛рдпрдХрд▓ рдмрд┐рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдХрднреА рд╡рд╛рдкрд╕ рди рдЖрдПрдВред рдореИрдВ рдЗрд╕реЗ рд╣реА рдХрд░реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдХреНрдпрд╛ рдЖрдкрдХреЛ рдбрд░ рд╣реИ, рдХрд┐ рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕ рдЕрдкреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдбрд░ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдЙрд╕ userexperience рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ: рд╢рдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдЧ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

PowerShell рдХреЗ рдХрд┐рд╕реА рднреА рдЬреНрдЮрд╛рди рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛, рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдХреНрдпреЛрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛?

@ yecril71pl рдмрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП: рдЖрдк "рд╡рд┐рд░реВрдкрд┐рдд" рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд╕реБрдЭрд╛рдП рдЧрдП рдлрд┐рдХреНрд╕ рдирд╣реАрдВред

рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХреЛ рдЖрдкрдХреЗ рджрдорди рд╕реЗ рдЙрддреНрдкрдиреНрди рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ рдЕрд╕рд╛рдзреНрдп рдмрдХрд╡рд╛рд╕ рд╣реВрдВред рдпрд╣ рд╕рд╣реА рд╣реИ тАФ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪреИрдкреНрдЯрд░ рдХреЛ рдХреНрдпрд╛ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

@ mklement0
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ @ Artoria2e5 рддрд░реНрдХ рдХреЗ рд╕рд░рдгреА рдХреЛ рдПрдХрд▓ lpCommandLine рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдкреБрд░рд╛рдиреЗ рдЖрд╣реНрд╡рд╛рди cmdline рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рдирд╣реАрдВ рд╣реИ рдпрд╛ рддреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдХрд┐ рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдмреБрд▓рд╛ рд░рд╣рд╛ рд╣реИ

echoargs.exe 'some"complicated_argument'

рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдХрд┐ рдХреНрдпрд╛ рдкреЙрд╡рд░рд╢реЗрд▓ some"complicated_argument рдЖрд╕рдкрд╛рд╕ рдЙрджреНрдзрд░рдг рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 1: рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдзрд┐рдХрд╛рд░ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ
echoarg.exe 'a\" b' рдФрд░ echoarg.exe '"a\" b"' рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
"C:\path\to\echoarg.exe" "a\" b" (рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг 2.0; 4.0; 6.0.0-рдЕрд▓реНрдлрд╛.15; 7.0.1)
рд▓реЗрдХрд┐рди Win10 рдкрд░ рдореЗрд░реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рдХреНрддрд┐рдпрд╛рдВ (рд╕рдВрд╕реНрдХрд░рдг 5.1.18362.752) рдЕрдиреБрд╡рд╛рдж рдХрд░рддреА рд╣реИрдВ
echoarg.exe 'a\" b' рд╕реЗ "C:\path\to\echoarg.exe" a\" b рдФрд░
echoarg.exe '"a\" b"' рд╕реЗ "C:\path\to\echoarg.exe" ""a\" b"" ред

рдЙрджрд╛рд╣рд░рдг 2: рдкреБрд░рд╛рдиреЗ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ
echoarg.exe 'a"b c"' рд╕реЗ "C:\path\to\echoarg.exe" "a"b c"" (рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг 2.0; 4.0;);
рдЬрдмрдХрд┐ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ
echoarg.exe 'a"b c"' рд╕реЗ "C:\path\to\echoarg.exe" a"b c" (рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг 5.1.18362.752; 6.0.0-рдЕрд▓реНрдлрд╛.15; 7.0.1)ред


рдЬреИрд╕рд╛ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдмрджрд▓рд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, @TSlivede , рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, @ Artoria2e5ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ: рд╣рдо рд╕рдордЭреМрддреЗ рдореЗрдВ 100% рд╣реИрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдХрднреА рднреА рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ lpCommandLine рдЫреЛрд░ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ; рдпрджрд┐ PowerShell рдиреЗ рд╕рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдХреЛ рднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд▓реЗрдХрд┐рди рд╡реЗ PowerShell рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рддрдм рд╣реИ рдЬрдм --% (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ; рдПрдХ рдЙрдЪрд┐рдд рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд╕рд╛рде, рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛; рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реЛ)ред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рд╡реЛрдЯ рд╣реИ (рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛)ред

TL; DR: рдпрд╣ рдзрд╛рд░рдгрд╛ рдХрд┐ рд╣рдо Microsoft Windows NT рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рддрд░реНрдХ рдХреА рд╕реАрдорд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рдмрдЪрд╛ рд╣реИред

рдореВрд▓ рд╡рд┐рдВрдбреЛрдЬрд╝ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдореВрд▓ рдЙрджреНрдзрд░рдг рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг:

CMD /CSTART="WINDOW TITLE"

рд╕рд┐рд╕реНрдЯрдо рдлрд╝рд╛рдЗрд▓ WINDOW рдирд╣реАрдВ рдвреВрдБрдв рд╕рдХрддрд╛ред

 { CMD /CSTART="WINDOW TITLE" }. Ast. EndBlock. Statements. PipelineElements. CommandElements[1]

StringConstantType
BareWord
рдореВрд▓реНрдп
/ CSTART = рд╡рд┐рдВрдбреЛ рд╢реАрд░реНрд╖рдХ
StaticType
System.String
рд╕реАрдорд╛
/ CSTART = "рдЦрд┐рдбрд╝рдХреА рдХреА рджреАрд╡рд╛рд░"
рдорд╛рддрд╛-рдкрд┐рддрд╛
CMD / CSTART = "рдЦрд┐рдбрд╝рдХреА рдХрд╛ рд░рд╛рд╕реНрддрд╛"

рдпрджрд┐ рд╣рдордиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрдорд╛ рд▓реЗ рд▓реА, рддреЛ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдПрдВрдЧреЗ рдФрд░ рд╣рдо рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдореВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдмрд╢рд░реНрддреЗ рдЙрдЪрд┐рдд рд╕рдорд░реНрдерди рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рднреАрддрд░ рд▓рд╛рдЧреВ рд╣реЛред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рднреАрддрд░ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдПрдХ рджреБрд░реНрдЧрдо рд╕рдорд╕реНрдпрд╛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реЗ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдмреИрдХрд╕реНрд▓реИрд╢ рдПрд╕реНрдХреЗрдк ( TASKLIST "\\\"PROGRAM FILES" ) рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдХрд░рдг рдЬреЛ ( DIR "\""PROGRAM FILES" /B ) рдФрд░ рдЙрдкрдХрд░рдг рдЬреЛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ( TITLE A " B )ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рд╣рдореЗрдВ рдмрдЪрдирд╛ рдерд╛, рддреЛ рд╕рднреА рдЖрдо рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрди рдЯреВрд▓ рдореЗрдВ рдмреИрдХрд╕реНрд▓реИрд╢ рдЬрд╝рд╣рд░ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдкрд▓рд╛рдпрди рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмрд╕ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбрдмрд▓ рдмреИрдХрд╕реНрд▓реИрд╢ \\ рдЕрд░реНрде рдЙрдирдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИ ( DIR "\\\"PROGRAM FILES" /B рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ) CMD /CECHO='A " B' ) рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ CMD рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдХреЛрдб рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдкреНрд░рд╛рд╡рдзрд╛рди рдирд╣реАрдВ рд╣реИред CMD рд╕рд┐рд░реНрдл рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддрд╛рд░ рднреА рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХреЙрдВрдбреНрд░рдо рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рд▓рдЧрддрд╛ рд╣реИред

TL; DR: рдпрд╣ рдзрд╛рд░рдгрд╛ рдХрд┐ рд╣рдо Microsoft Windows NT рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ _wrong_ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рддреЛ рдпрд╣ PowerShell рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдореВрд▓ рд╡рд┐рдВрдбреЛрдЬрд╝ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдореВрд▓ рдЙрджреНрдзрд░рдг рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг:

CMD /CSTART="WINDOW TITLE"

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЗрдирд╡реЙрдЗрд╕ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕реЗ рднрд╛рд╖рд╛ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдкрдиреЗ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ PowerShell рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

CMD "/CSTART=WINDOW TITLE"
CMD '/CSTART=WINDOW TITLE'
CMD /CSTART=WINDOW` TITLE

TL; DR: рдпрд╣ рдзрд╛рд░рдгрд╛ рдХрд┐ рд╣рдо Microsoft Windows NT рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ _wrong_ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рддреЛ рдпрд╣ PowerShell рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо CMD рддрд░реНрдХ /CECHO=A " B рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди PowerShell рдЗрд╕реЗ рд╡рд┐рдХреГрдд рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ред

рдореВрд▓ рд╡рд┐рдВрдбреЛрдЬрд╝ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдореВрд▓ рдЙрджреНрдзрд░рдг рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг:

CMD /CSTART="WINDOW TITLE"

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЗрдирд╡реЙрдЗрд╕ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕реЗ рднрд╛рд╖рд╛ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдкрдиреЗ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ PowerShell рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

CMD "/CSTART=WINDOW TITLE"
CMD '/CSTART=WINDOW TITLE'
CMD /CSTART=WINDOW` TITLE

рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐, рдЬрдм Microsoft Windows NT рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ PowerShell рдХреЗ рдкрд╛рд╕ рдЙрди рддрд░реНрдХреЛрдВ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреЗ рдЕрд╕рдВрдЦреНрдп рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ PowerShell рдХреЗ рд╕рдорддреБрд▓реНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдорддреБрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВред рдХреБрдВрдж рд╣реЛрдирд╛ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рддрд░реНрдХреЛрдВ рдХреЗ рд╡рди рдЯреНрд░реВ рд╡реЗ тДв рдХреЛ рдордЬрдмреВрд░ рдХрд░рдирд╛, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛, рдЗрд╕реЗ рд╣рд▓реНрдХрд╛ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

@ yecril71pl рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╕рднреА --% рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рдХрд░ рдЗрд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛

--% рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реАрдорд┐рдд рд╣реИред

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк --% рд╕рд╛рде рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:

PS > $env:mytitle='WINDOW TITLE'
PS > cmd --% /CSTART="%mytitle%"

рддреЛ рдореБрдЭреЗ рдХреНрдпрд╛ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

рд╣рдо рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ CMD /CSTART="$mytitle" , рдЪреАрдЬреЛрдВ рдХреЛ рд▓реАрдХ рдмрд┐рдирд╛ ENV: ред

рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Environment.ExpandEnvironmentVariables рдХреЛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпреВрдирд┐рдХреНрд╕ рд╡реИрд╕реЗ рднреА рдХреЛрдИ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реА # рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдкрд░ рд╕рд╛рдорд╛рди рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рди-рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЪреВрдБрдХрд┐ env var рдирд╛рдореЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рд╕рдВрдХреЗрддреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, %=$a% рд╣рдорд╛рд░реЗ рдкрд╛рд╕ $a ред рдпрд╣ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд▓рдЪреАрд▓реЗ (рдФрд░ рд╕рдВрднрд╡рддрдГ рдЦрд░рд╛рдм) рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЛ рддреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдирд░реНрдХ, рд╣рдо %VARNAME=$var% рдХреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реЙрд▓рдмреИрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд▓реЗрдЦрди рдирд░рдХ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ ... рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред

  • рд╣рдо _not_ рдХреЛ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИред

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рд╡рд╣ _how рдХреЗ рд╕рд╛рде рд╣реИред PowerShell рдиреЗ verbatim, рдХрдбрд╝реЗ рддрд░реНрдХ рджрд┐рдП рд╣реИрдВ рдЬреЛ _its_ рдХреЗ рдХрд╛рд░рдг рдмрд╛рд╣реНрдп (рдореВрд▓) рдирд┐рд╖реНрдкрд╛рджрдирдпреЛрдЧреНрдп_ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ:

    • _Windows_ рдкрд░, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЬреЛ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреА рд╣реИ, _not_ рддрд░реНрдХреЛрдВ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреА рд╣реИ , рдЬреИрд╕рд╛ рдХрд┐ Microsoft C / C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рд▓реЗрдЦрди Parsing C ++ рдХрдорд╛рдВрдб рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд

    • рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдПрдХ _different_ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рдВрднрд╡рддрдГ рдПрдХ рдУрд╡рд░рд╕рд╛рдЗрдЯ рдХреЗ рдХрд╛рд░рдг, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЬреЛ рдирд┐рд░реНрдорд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд╕реНрдерд┐рддрд┐рдЧрдд рд░реВрдк рд╕реЗ _syntactically рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рдЯреВрдЯреА рд╣реБрдИ рд╣реИ, рддрд░реНрдХ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдореНрдмреЗрдбреЗрдб рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╕рд╛рде рд╣реА рдЦрд╛рд▓реА-рддрд░реНрдХреЛрдВ рдХрд╛ рддрд░реНрдХ рджрд┐рдпрд╛ред

    • рдЕрдВрддрддрдГ, рд╕рдорд╕реНрдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХреА рдореВрд▓рднреВрдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИ: рдЖрдк рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреЛ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ _ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди_ - _all_ рддрд░реНрдХреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдХрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ - рдЙрдиреНрд╣реЗрдВ рддрд░реНрдХ рдХреЗ _array_ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рдпреВрдирд┐рдХреНрд╕ рдХреА рддрд░рд╣ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ)ред рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _quoting рдФрд░ рднрд╛рдЧрдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдЕрдВрддрддрдГ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП _up рд╣реИред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд┐рдиреА-рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд╡реЗ _re-perform_ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╢реЗрд▓ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рджрд░реНрд╢рди рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ _shell рдХрд╛ рдХреЗрд╡рд▓_ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕рд╛ рд╣реИ) рдпреВрдирд┐рдХреНрд╕ рдкрд░ рдорд╛рдорд▓рд╛), рдЕрд░реНрдерд╛рддреН рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрд░реНрдХреЛрдВ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрд░рд╛рдЬрдХрддрд╛ рд╣реИ рдЬреЛ рддрд░реНрдХ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ ред

    • рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЛ рдЙрдХреНрдд рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ _AST_ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдирдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рд╕реЗ рдЙрд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрдВрд╕реЛрд▓ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд░рдирдЯрд╛рдЗрдореНрд╕ рдЗрди рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ Microsoft C / C ++ /) .NET рд░рдирдЯрд╛рдЗрдореНрд╕)ред рд╕рдордЭрджрд╛рд░ рд╕рдорд╛рдзрд╛рди рдЗрд╕рд▓рд┐рдП рд╣реИ:

      • рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
      • "рджреБрд╖реНрдЯ" рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдореЗрдВ _not_ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ - рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ cmd.exe , рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдФрд░ Microsoft рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдЬреИрд╕реЗ msiexec.exe рдФрд░ msdeploy.exe - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рд▓рдХреНрд╖реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛; рдпрд╣ --% , рд╕реНрдЯреЙрдк-рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рддреАрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдпрджреНрдпрдкрд┐ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ ред
    • _Unix_ рдкрд░, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ _a рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг all_ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╢рдмреНрджрд╢рдГ рддрд░реНрдХ рдХрд╛ рд╕рд░рдгреА _as-is_ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП , рдЬреЛ .NET .NET рдЕрдм рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (v2.1 рдХреЗ рдмрд╛рдж рд╕реЗ, ProcessStartInfo.ArgumentList ; рдЗрд╕реЗ _always_ рдиреЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ - рд╕рдордЭрджрд╛рд░реА рд╕реЗ - _ рдХреЛрдИ рдЖрджреЗрд╢ рд▓рд╛рдЗрдиреЗрдВ рдирд╣реАрдВ рд╣реИрдВ_, рдХреЗрд╡рд▓ рддрд░реНрдХ рд╕рд░рдгрд┐рдпрд╛рдБ, рдЬрдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИ)ред

    • рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо ProcessStartInfo.ArgumentList , рддреЛ рдпреВрдирд┐рдХреНрд╕ рдХреА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ @TSlivede рдХреЗ https://github.com/PowerShell/PowerShell-RFC/pull/90 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

Https://github.com/PowerShell/PowerShell-RFC/pull/90#issuecomment -650242411 рдореЗрдВ рдореИрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА "рдЙрдЧреНрд░рддрд╛" рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рд╣реИ, рдЬреЛ рдЙрдЪреНрдЪ рдХреЗ рд▓рд┐рдП CLI рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреЗ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рджрд┐рдпрд╛ рд╣реИред -рдЕрдкреНрд░реВрдлрд╝рд╛рдЗрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЬреИрд╕реЗ рдПрдЬрд╝реНрдпреЛрд░ (рд╕реАрдПрд▓рдЖрдИ az рдХреЛ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, az.cmd )ред
рдЗрд╕реА рддрд░рд╣, рд╣рдореЗрдВ msiexec.exe рдФрд░ msdeploy.exe рдФрд░ рд╢рд╛рдпрдж рдЕрдиреНрдп рд╣рд╛рдИ-рдкреНрд░реЛрдлрд╛рдЗрд▓ "рджреБрд╖реНрдЯ" Microsoft CLIs рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдореЙрдбреНрдпреВрд▓, Native , ( Install-Module Native -Scope CurrentUser ) рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдЗрд╕рдХреЗ ie рдлрд╝рдВрдХреНрд╢рди ( i nvoke (рдмрд╛рд╣реНрдп) e xecutable рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ; iep рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛

рдЗрд╕рдореЗрдВ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рджрд╛рди рдХреЗ рд▓рд┐рдП ins ( Invoke-NativeShell ) рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ , рдЬреЛ # 13068, рдФрд░ dbea ( Debug-ExecutableArguments ) - https: // github рджреЗрдЦреЗрдВред com / рдкреЙрд╡рд░рд╢реЗрд▓ / рдкреЙрд╡рд░рд╢реЗрд▓ / рдореБрджреНрджреЗ / 13068 # рдЬрд╛рд░реА рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП -671572939ред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: ie рдПрдХ рд╡рд┐рдиреАрдд рд╕реНрдЯреЙрдкрдЧреИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдареАрдХ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ ie рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирд╡реЙрдЗрд╕рд┐рдВрдЧ рдЙрдкрд╕рд░реНрдЧ рджреНрд╡рд╛рд░рд╛:

рдХреЗ рдмрдЬрд╛рдп:

# This command is currently broken, because the '{ "name": "foo" }' argument isn't properly passed.
curl.exe -u jdoe  'https://api.github.com/user/repos' -d '{ "name": "foo" }'

рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

# OK, thanks to `ie`
ie curl.exe -u jdoe  'https://api.github.com/user/repos' -d '{ "name": "foo" }'

CMD /CSTART="WINDOW TITLE" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (рдЬрд┐рд╕рдХрд╛ рдЕрдзрд┐рдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд░реВрдк cmd /c start "WINDOW TITLE" , рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ):

рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╕рд╛рд░ рдореЗрдВ рд╣реИ prop="<value with spaces>" рдХреЗ рд▓рд┐рдП рдмрд╣рд╕ msiexec / msdeploy : PowerShell - рдЙрдЪрд┐рдд - рд░реВрдкрд╛рдВрддрд░рдг /CSTART="WINDOW TITLE" рдореЗрдВ "/CSTART=WINDOW TITLE" , рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐ cmd.exe рдордВрдЧрд▓рд╛рдЪрд░рдг рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:

  • ins / Invoke-NativeShell ( cmd.exe /c рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИ рдзреНрдпрд╛рди рджреЗрдВ):

    • ins 'START="WINDOW TITLE"'
    • рдпрджрд┐ рдЖрдк _expandable_ string рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрдорд╛рдВрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ PowerShell рдорд╛рди рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

      • $title = 'window title'; ins "START=`"$title`""

  • рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд░реНрддрдорд╛рди --% рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ:

    • cmd --% /CSTART="WINDOW TITLE"
    • рдЬреИрд╕рд╛ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, --% рдПрдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕реАрдорд╛ _PowerShell_ рдорд╛рдиреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ _aux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░_ рдФрд░ рдЗрд╕реЗ %...% рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВ:

      • $env:_title = 'window title'; cmd --% /CSTART="%_title%"

      • рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, --% рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ _single_ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЬреИрд╕реЗ,

        cmd --% '/CSTART="WINDOW TITLE"' рдпрд╛ cmd --% "/CSTART=`"$title`"" - рд▓реЗрдХрд┐рди рдпрд╣ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП _new_ рдкреНрд░рддреАрдХ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдПрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреА рд╣реИред

  • рд╡реЗ _re-perform_ рдХреЛ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╢реЗрд▓ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ CMD.EXE рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡рд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдмрд╛рдХреА рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ (рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рдж, рдЬреЛ рддрд░реНрдХ рд╕реАрдорд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдВрдмрдВрдз рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдмреЗрд╢рдХ, рдЖрдВрддрд░рд┐рдХ рд╢реЗрд▓ рдХрдорд╛рдВрдб рдпрд╣рд╛рдВ рдЕрдкрд╡рд╛рдж рд╣реИрдВред

рдпрд╣ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ prop="<value with spaces>" msiexec / msdeploy рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ

рдореИрдВ рдпрд╛ рддреЛ рдПрдХ рдЖрд╢реНрд╡рд╕реНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд┐рдирд╕реЗ рдореИрдВ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВред

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛: рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ CMD.EXE рддрд░реНрдХреЛрдВ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ

  • рдпрд╣ _explicit_ splitting рдХреЗ рдмрд┐рдирд╛ рджреВрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм _external рдирд┐рд╖реНрдкрд╛рджрдХ_ (рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрдорд╛рдВрдб) рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ _batch files_ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

  • рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрдиреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рднреА рдЗрд╕реЗ рддрд░реНрдХ рд╕реАрдорд╛рдУрдВ рдХрд╛ _aware_ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХреНрдпрд╛ рджрд┐рдП рдЧрдП рдореЗрдЯрд╛рдЪреИрдХрд░ (рдЬреИрд╕реЗ & ) рдХреЗ рдкрд╛рд╕ _syntactic_ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рджреЛрд╣рд░реЗ-рдЙрджреНрдзреГрдд рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ:

:: OK - the "..." around & tells cmd.exe to use it verbatim
C:\>echoArgs.exe one "two & three"
Arg 0 is <one>
Arg 1 is <two & three>

Command line:
"C:\ProgramData\chocolatey\lib\echoargs\tools\EchoArgs.exe" one "two & three"

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, cmd.exe _embedded_ " рд╡рд░реНрдгреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред рдЕрдЧрд░ "" рдмрдЪ рдЧрдП рддреЛ "..." рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ

:: OK - the "" is recognized as an escaped "
C:\>echoArgs.exe "3"" of rain & such."
Arg 0 is <3" of rain & such.>

Command line:
"C:\ProgramData\chocolatey\lib\echoargs\tools\EchoArgs.exe" "3"" of rain & such."

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, cmd.exe _only_ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (Windows-only) "" рдФрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ \" (рдЬреЛ рдХрд┐ PixIX рдХреА рддрд░рд╣ _shells_ рдХреЗ рд▓рд┐рдП Unix _exclusively_ рдЙрдкрдпреЛрдЧ - рдиреЛрдЯ: _shells_, рди рдХрд┐ _programs_, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд╡рд▓ рд╢рдмреНрджрд╢рдГ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд░рдгреА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╢реЗрд▓ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ)ред

рдЬрдмрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЬреНрдпрд╛рджрд╛рддрд░ CLIs _both_ "" рдФрд░ \" , рдХреБрдЫ _only_ \" (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░реНрд▓ рдФрд░ рд░реВрдмреА) рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдк рдореБрд╕реАрдмрдд рдореЗрдВ рд╣реИрдВ:

:: !! BROKEN: cmd.exe misinterprets the & as *unquoted*, thinks it's the statement-sequencing operator, 
:: !! and tries to execute `such`:
C:\>echoArgs.exe "3\" of rain & such."
Arg 0 is <3" of rain >

Command line:
"C:\ProgramData\chocolatey\lib\echoargs\tools\EchoArgs.exe" "3\" of rain

'such."' is not recognized as an internal or external command,
operable program or batch file.

рдЗрд╕рд▓рд┐рдП:

  • рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ cmd.exe рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред

    • рдмрд╛рд╣реНрдп рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░реЗрдВ (рдПрдХ рдмрд╛рд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░) рдпрд╛ ie (рдЕрднреА рдХреЗ рд▓рд┐рдП) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, _PowerShell рдХреЗ_ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
  • рдпрджрд┐ рдЖрдкрдХреЛ cmd.exe рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП ins / Invoke-NativeShell рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ PowerShell рдЪрд░ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд╛рдиреЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред ред

    • рдЕрднреА рднреА cmd.exe рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдз рдХрд╛рд░рдг рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП PowerShell рдХреЗ рд╕рдорд░реНрдерди рдХреА рдХрдореА рдХреА рднрд░рдкрд╛рдИ рдХрд░рдирд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ SO рдЙрддреНрддрд░ рдХреЛ рджреЗрдЦреЗрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реА рдлреНрд▓рд╛рдХреНрд╕ рдкрдХрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛ рд░рд╣реА рдЪрд░реНрдЪрд╛ рдХреА рдЧрд╣рд░рд╛рдИ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди ... рдмрддрдЦ ... рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореМрдЬреВрдж рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ ?

рдпрд╣ рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рддрд░реНрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж "рдЕрд░рд╛рдЬрдХрддрд╛" рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░рд╢реЗрд▓ рдореЗрдВ рд╕рд╢рдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЬреЛ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд╡реАрд╕реА ++ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИред рдпрд╣ рдмрдбрд╝рд╛ рд╣реИ, рдФрд░ рд╣рдо рдХреЗрд╡рд▓ рдирдИ (рдФрд░ рдХрд╛рдлреА рд╣рдж рддрдХ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ) рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд▓рдВрдмреА рдкреВрдВрдЫ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред

рдЙрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рд▓рд┐рдирдХреНрд╕ (рдЬреИрд╕реЗ рдбреЙрдХрд░, рдХреЗ 8, рдЧрд┐рдЯ, рдЖрджрд┐) рдХреЗ рдмреАрдЪ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИрдВ, рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИред

рдФрд░ рдЙрди "рджреБрд╖реНрдЯ" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рдЦрд░рд╛рдм рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рд╡реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╡рд┐рд░рд╛рд╕рдд, рд╡рд┐рдВрдбреЛрдЬ-рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╣реИрдВред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЖрдкрдиреЗ @ mklement0 рдХрд╛ рдЬреЛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдПрдХ "рд╕рд╣реА" рд╕рдорд╛рдзрд╛рди рд╣реИред рдореИрдВ рдЕрднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЦрд░рд╛рдм рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛рдПред

рд╕реБрдВрджрд░ рдореВрд▓ usages рддреЛрдбрд╝:

тЭп git commit --allow-empty -m 'this is what we call a "commit message" which contains arbitrary text, often with punctuation'
error: pathspec 'message which contains arbitrary text, often with punctuation' did not match any file(s) known to git
тЭп $a = 'this is what we call a "commit message" which contains arbitrary text, often with punctuation'
тЭп git commit --allow-empty -m "$a"
error: pathspec 'message which contains arbitrary text, often with punctuation' did not match any file(s) known to git
тЭп $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.0.3
PSEdition                      Core
GitCommitId                    7.0.3
OS                             Microsoft Windows 10.0.19042
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0тАж}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

git.exe рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП PowerShell рдореЗрдВ рдлрд┐рдХреНрд╕ рд╕реАрдзрд╛ рд╣реЛрдЧрд╛, рдпрджреНрдпрдкрд┐ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рд╕реНрдорд╛рд░реНрдЯ рд╡рд░реНрдХ-рдЕрд░рд╛рдЙрдВрдб рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред cmd.exe рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдХрдард┐рди рд╣реИ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЙрди рд╕рднреА рдХреЛ рдирд╣реАрдВред рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрдпрд╛рд╡рд╣ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд╛рд╡рд░рд╢реЗрд▓ рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдПрдирдЯреА рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖред рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ _рд╡реНрд╣реАрдЯрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬрдм cmd.exe рдЬреИрд╕реЗ рдПрдХ рдмреАрдорд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрд▓ рдХреА рдЬрд╛рдПрдЧреА рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕_ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред PowerShell рдиреЗ cmd.exe рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рддрд╛рдХрд┐ cmd.exe рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП MSI рдХреЛ ActiveX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреЛ рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдЬрд░реВрд░реА рд╣реИ рдЬреЛ рдХрд╡рд░ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ?

@ рдкрд╛рд╡рд░рд╢реЗрд▓ / рдкрд╛рд╡рд░рд╢реЗрд▓-рд╕рдорд┐рддрд┐ рдиреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рд╣рдо git рдЙрджрд╛рд╣рд░рдг рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд╡ рд╕рдореНрдореЛрд╣рдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдереЗ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 7.2 рдореЗрдВ рдЬрд▓реНрджреА рдПрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ --% рдХреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЙрд╕реЗ рдЕрдирдкрд╛рд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ:

PS> testexe --% -echoargs 'a b c "d e f " g h'
Arg 0 is <'a>
Arg 1 is <b>
Arg 2 is <c>
Arg 3 is <d e f >
Arg 4 is <g>
Arg 5 is <h'>

рдпрд╣ рджреЗрд╢реА рдХрдорд╛рдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рдмрд╛рдЗрдВрдбрд░ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред

рд╣рд╛рдБ, рдзрдиреНрдпрд╡рд╛рдж @cspotcodeред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖рдг рдерд╛ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╣рд┐рдЯ рд╣реВрдВ)ред

рдореИрдВ рдЕрднреА рднреА рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдкрд╣рд▓реВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ, рдФрд░ рдпрд╣ рдореЗрд░рд╛ рдЦреНрдпрд╛рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИ рдЬреЛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдВрддрддрдГ рдЗрд╕реЗ рдмрдирд╛ рджреЗрдЧрд╛ред

рдореБрдЭреЗ рдЖрдкрдХреЗ RFC, @ mklement0 рдХреА рдЕрдиреБрдорддрд┐ рд╕реВрдЪреА / "рд░реВрдЬ рдРрдк" рдкрд╣рд▓реВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рддрд░рд╣ рдХреА рд╕реВрдЪреА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╕рд╛рдЗрди рдЕрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@joeyaiello рдФрд░ @ SteveL-MSFT, рдореБрдЭреЗ рдкрд╣рд▓реЗ рдПрдХ рдореЗрдЯрд╛ рдЕрд╡рд▓реЛрдХрди рдмрдирд╛рдиреЗ рджреЗрдВ:

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ @cspotcode рдХреЗ рдЙрджрд╛рд╣рд░рдг рдиреЗ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ _gllook_ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрднреА рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреА рд╕рдордЭ рдФрд░ рд╕рд░рд╛рд╣рдирд╛ рдХреА рдореВрд▓рднреВрдд рдХрдореА (рдореИрдВ рдмрд╛рдж рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдмрд╣рд╕ рдХрд░реВрдБрдЧрд╛) рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ ред

рдпрд╣ рдПрдХ _personal_ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИ: рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╣реБрдд рдкрддрд▓реЗ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдХрдард┐рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ _structural_ рд╕рдорд╕реНрдпрд╛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ: рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдореБрджрд╛рдп рдХреА рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП, рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рддрд╣реА рд╕рдордЭ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ @ PowerShell / powershell-рд╕рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдгрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рд▓рд┐рдП, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рдорд┐рддрд┐ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣рд╛рдБ рдкрд░ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрд╕реЗ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ:

рд╡рд┐рд╖рдп-рд╡рд┐рд╢реЗрд╖-рд╡рд┐рд╢рд┐рд╖реНрдЯ _sub_-рд╕рдорд┐рддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпреБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рд╕рдорд┐рддрд┐ рдЙрд╕ _do_ рдХреЗ рд╕рд╛рде рдкрд░рд╛рдорд░реНрд╢ рдХрд░рддреА рд╣реИ, рдЙрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдореБрджреНрджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭ рд╣реИ?

рдХреНрдпрд╛ рдЖрдк testexe SteveL-MSFT рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ!

@TSlivede рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ agly https://github.com/PowerShell/PowerShell/issues/13068#issuecomment -665125375 рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ:

рджреВрд╕рд░реА рдУрд░ PowerShell рдПрдХ рд╢реЗрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ (# 1995 рддрдХ рд╣рд▓ рд╣реЛрдиреЗ рддрдХ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ _is_ рдПрдХ рд╢реЗрд▓ рд╣реИ)

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╢реЗрд▓ рдХрд╛ рдореБрдЦреНрдп рдЖрджреЗрд╢ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдирд╛ рд╣реИред

PowerShell рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рдЬрдирд╛рджреЗрд╢ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рдбрдмрд▓ рдХреЛрдЯреНрд╕ рдФрд░ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ-рдУрдирд▓реА рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдХреНрд╖рдо рдмрд╛рд╣рд░реА рд╕реАрдПрд▓рдЖрдИ рдХреА рдХрдореА рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рджрд┐рди рджреВрд░ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рдкрд╛рд╡рд░рд╢реЗрд▓ рдЦреБрдж рдХреЛ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЦреЛрд▓, рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@cspotcode рдХрд╛ git рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИ; рдХреЛрдИ рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЬрд┐рд╕реЗ рдЖрдк JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЬреИрд╕реЗ, curl - рдПрдХ рдФрд░:

# On Unix; on Windows, 
#   echoArgs.exe '{ "foo": "bar" }' 
# would show the same problem.
PS> /bin/echo '{ "foo": "bar" }'
{ foo: bar }  # !! Argument was incorrectly passed.

рдкрд┐рдЫрдбрд╝реЗрдкрди рдХреЛ рдПрдХ рддрд░рдл рдЫреЛрдбрд╝рдХрд░:

  • рдпреВрдирд┐рдХреНрд╕ рдкрд░, рд╕рдорд╕реНрдпрд╛ рддреБрдЪреНрдЫ рд╣реИ рдФрд░ _completely_ рдиреЗ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ ProcessStartInfo.ArgumentList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред

  • рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рджреГрд╢реНрдпреЛрдВ рдХреЗ рдкреАрдЫреЗ ProcessStartInfo.ArgumentList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

    • рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ ("рджреБрд╖реНрдЯ" рд╕реАрдПрд▓рдЖрдИ) рдХреЗ рд▓рд┐рдП, ( рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ ) --%
    • _Courtesy_ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо --% рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рд╕рд┐рджреНрдз рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рднрд░рдкрд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдиреАрдЪреЗ рджреЗрдЦреЗрдВред

рдЗрд╕рд▓рд┐рдП, _рд╕ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж_, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛:

  • рддрд░реНрдХ-рдкрд╛рд╕рд┐рдВрдЧ рдХреЗ рдХрд╛рдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреА рдХреАрдордд рдкрд░ __ рдЙрдкрд╕рд░реНрдЧ рдХрд░реЗрдВред

  • рдпрджрд┐ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░реНрд╡реЛрдкрд░рд┐ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреИрд╕реЗ ie рдлрд╝рдВрдХреНрд╢рди Native рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдирд┐рд╖реНрдкрд╛рджрдирдпреЛрдЧреНрдпред

рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯреА рд╣реБрдИ рдореВрд▓рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ _experimental_ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


@ SteveL-MSFT

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ --% рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рднреА рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИ:

рдпрд╣ рдПрдХ _Windows-only_ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ "..." рдЙрджреНрдзреГрдд рдХрд░рдирд╛ рдФрд░ %...% -рд╕реНрдЯрд╛рдЗрд▓ рдкрд░рд┐рд╡реЗрд╢-рдЪрд░ рд╕рдВрджрд░реНрдн рдЬрд╛рдирддрд╛ рд╣реИред

рдпреВрдирд┐рдХреНрд╕ рдкрд░, "рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдирд╛" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ: _ рдХреЗрд╡рд▓ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди_ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рдХреА рд╕рд╛рд░рдгреАред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, _someone_ рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рддрд░реНрдХреЛрдВ рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ _before_ рдордВрдЧрд▓рд╛рдЪрд░рдг, рдЬрд┐рд╕рдХрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде ProcessStartInfo рд╡рд░реНрдЧ рдореЗрдВ, рдЗрд╕рдХреА .Arguments рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Unw рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _Windows_ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред - рдФрд░ рдЗрд╕рд▓рд┐рдП "..." рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реИ (рдПрдореНрдмреЗрдбреЗрдб " рд░реВрдк рдореЗрдВ "" рдпрд╛ \" ) рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд╕рд╛рдеред

--% рдПрдХ Windows- рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡реИрдз рдЙрджреНрджреЗрд╢реНрдп "рджреБрд╖реНрдЯ" рд╕реАрдПрд▓рдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред


@joeyaiello

Windows рдФрд░ VC ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИред

рдХреБрд▓рдкрддрд┐ рдХреЗ рдЖрджреЗрд╢ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП

рдпрд╣ рдЗрд╕ рдЕрдзрд┐рд╡реЗрд╢рди рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд▓рди рд╣реИ , рдЬрд┐рд╕рдХреА ProcessStartInfo.ArgumentList рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рддрдГ рд╣реА рд╣рдореЗрдВ рджреЗрдЧрд╛ред

_ рдпрд╣ рдЕрдХреЗрд▓реЗ рдХреЙрд▓ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред рд╕рднреА рдХреЙрд▓ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рд╣реИ ред_

рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, "рджреБрд╖реНрдЯ" рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЗрдВ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рдЧреИрд░-рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдкреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, --% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ ins / Invoke-NativeShell Native рдореЙрдбреНрдпреВрд▓ рд╕реЗ; )ред

_A рд╢рд┐рд╖реНрдЯрд╛рдЪрд╛рд░_ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд "рджреБрд╖реНрдЯ" рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдмреИрдЪ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдХреБрдЫ рд╣рд╛рдИ-рдкреНрд░реЛрдлрд╛рдЗрд▓ Microsoft CLIs:

  • рдмреИрдЪ-рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдорд╛рдорд▓рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдФрд░ рд╕рдВрдХрд▓реНрдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, a&b "a&b" , рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ) - рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЯрд╛рд▓ рджреЗрдЧрд╛ рд╕рднреА рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд╕рд╛рде --% рдЬреЛ рдЕрдкрдиреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ), рдЬреИрд╕реЗ рдХрд┐ Azure рдХрд╛ az.cmd

  • рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдВрдЧ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рд╡рд┐рдХрд▓реНрдк - рдЬреЛ рдХрд┐ рднреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдкреЙрд╡рд░рд╕реЗрд╢ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рддрд░реНрдХреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд _рдкрд╛рдЯрди_ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ - <word>=<value with spaces> - рдФрд░, "<word>=<value with spaces>" рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред , рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, <word>="<value with spaces>" ; рдЙрддреНрддрд░рд╛рд░реНрджреНрдз "рджреБрд╖реНрдЯ" рд╕реАрдПрд▓рдЖрдИ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рдореНрдореЗрд▓рди-рдкрд╛рд▓рди рд╕реАрдПрд▓рдЖрдИ рджреНрд╡рд╛рд░рд╛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, echoArgs "foo=bar baz" рдЕрдВрддрддрдГ echoArgs --% foo="bar baz" рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдкрд╣рд▓рд╛ рддрд░реНрдХ рджреЗрдЦрддрд╛ рд╣реИ

@musm рдЖрдк TestExe рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

GitHub
рд╣рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП PowerShell! GitHub рдкрд░ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдХрд░ PowerShell / PowerShell рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреА "рд╕рд╣рд╛рдпрдХрддрд╛" рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рд╢рд╛рдпрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

# Arguments passed correctly, without regard for the program's ability to handle them
& $program a "" 'c "d e" f'
# Try to pass the arguments intelligently based on the program being called
&[] $program a "" 'c "d e" f'
# Escape the arguments for a batch file, eg) " -> ""
&[bat] $program a "" 'c "d e" f'

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЯреВрдЯрд╛ рдирд╣реАрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд╛рд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд░ рдХреЛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд░реЗрдВрдЯрд╕ рдХреЛ рдШреЗрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛ рднреА рдЯреВрдЯреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ --% рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдкрд╡рд╛рдж рд╡рд░реНрдЧ рдЬреЛ рд╡реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо (рдмреБрджреНрдзрд┐рдорд╛рди рдЖрд╣реНрд╡рд╛рди рдХреЗ рд▓рд┐рдП) рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдмрдЪрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЬрд╣рд╛рдВ рдЖрдк рдмрд╕ рдЙрд╕ рдкрд░ рдХрдорд╛рдВрдб рд╕рд╛рд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЯреНрд░реА рдлреЗрдВрдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рддрд░реНрдХ рд╕рд░рдгреА / рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

  • "<word>=<value with spaces>" рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, <word>="<value with spaces>"

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдореЗрдВ рдХреЙрд▓ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП:

  1. рдПрдХ рдХреЙрд▓ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рдкрд╛рда рдореЗрдВ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдкреВрд░реЗ рдореВрд▓реНрдп рдХреЗ рдЖрд╕рдкрд╛рд╕ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдПрдХ рдХреЙрд▓ рдЬрд┐рд╕рдореЗрдВ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ _if рд╕рдВрднрд╡_ред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ:
| рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрд░реНрдХ | рдХрдорд╛рдВрдб рд▓рд╛рдЗрди |
| ----------------- | ---------------- |
| p=l of v | "p = l рдХрд╛ v" |
| p=l` of` v | "p = l рдХрд╛ v" |
| p="l of v" | p = "l рдХрд╛ v" |
| p="l of v"'a s m' | p = "l of v" a "sm" |
| p="l of v"' s m' | p = "рдмрдирд╛рдо рдПрд▓рдПрдо" |

рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддреА рд╣реИ рдЬрд╣рд╛рдВ рдореВрд▓ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реА рдлреНрд▓рд╛реЕрдХ рдкрдХрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛ рд░рд╣реА рдЪрд░реНрдЪрд╛ рдХреА рдЧрд╣рд░рд╛рдИ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди ..._ ducks _... рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореМрдЬреВрдж рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ ?

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ (рдпрд╣ рдЕрдм рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ ...) рдХрд┐ рдореБрдЭреЗ рдкреЙрд╡рд░реНрд╕ рдореЗрдВ рдбрдмреНрд▓реНрдпреВрдПрдлрдЯреА рдХреНрд╖рдг

rg '"quoted"'

рдФрд░ git рдмреИрд╢ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдЕрдм рдореБрдЭреЗ рдпрд╣ рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл рдХреНрд╖рдг рдХрдо рдорд┐рд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд▓рдВрдмреЗ рдЧреАрдереВрдм рдореБрджреНрджреЗ рдХреЛ рдкрд╛рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ " Powershel рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ "git.exe" рдЙрджрд╛рд╣рд░рдг рднреА рдмрдврд╝рд┐рдпрд╛ рд╣реИред

рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдм рдореБрдЭреЗ рдореВрд▓ рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╣рд┐рдореНрдордд рднреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ " рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдпрд╛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, @ mklement0 рдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдмрддрд╛рдпрд╛ (рдЗрд╕реЗ рдХрд╣реАрдВ рдкрддреНрдерд░ рдореЗрдВ рдЙрдХреЗрд░рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╢реЗрд▓ рдХрд╛ рдореБрдЦреНрдп рдЖрджреЗрд╢ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдирд╛ рд╣реИ ред
PowerShell рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рдЬрдирд╛рджреЗрд╢ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рдбрдмрд▓ рдХреЛрдЯреНрд╕ рдФрд░ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ-рдУрдирд▓реА рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдХреНрд╖рдо рдмрд╛рд╣рд░реА рд╕реАрдПрд▓рдЖрдИ рдХреА рдХрдореА рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рджрд┐рди рджреВрд░ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рдкрд╛рд╡рд░рд╢реЗрд▓ рдЦреБрдж рдХреЛ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЦреЛрд▓, рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рд╣рдХрд░реНрдореА рдиреЗ рдореБрдЭреЗ рд▓рд┐рдЦрд╛ рдХрд┐ рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЙрдирдХреА рдорд╢реАрди рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреЙрд╡рд░реНрд╕рд▓ рдХреЛрд░ рдкрд░ рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╡рд╣ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдкрд░ рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ред рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдкрд░ "рдмреАрдУрдПрдо" рдФрд░ рдкреЙрд╡рд░реНрд╕реЗрд▓ рдХреЛрд░ рдкрд░ рдмреАрдУрдПрдо рдХреЗ рдмрд┐рдирд╛ Out-File -Encoding utf8 рдПрдиреНрдХреЛрдбреЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдкреЙрд╡рд░реНрд╕рд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реВрдХреНрд╖реНрдо рд╡рд┐рд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рд╕реЗ quirks рдФрд░ рд╕рд╣рдЬ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреЙрд╡рд░реНрд╕рд▓ рдЯреАрдо рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЙрджрд╛рд░ рдереА, рдЬрдм рдЕрдм рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд░реЙрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдЬреЛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдмрд╛рд╣рд░ рд╢рд┐рдкрд┐рдВрдЧ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ "рдореЗрдирдЯреЗрдиреЗрдВрд╕" рдореЛрдб рдореЗрдВ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдкреБрд░рд╛рдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЯреВрдЯ рдЧрдИред

рд░реЗ: рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ - рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред _Many_ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕рд╣рди рдХрд┐рдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рд╡рд░реАрдпрддрд╛ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЙрдЪрд┐рдд рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рд╣реИрдВ, рдЬреЛ _Sassively_ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдордЧреНрд░ рд╢реЗрд▓ рдЕрдиреБрднрд╡ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рдмрд╛рд╣рд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рд░ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдордп рдФрд░ рд╕рдордп рдлрд┐рд░ рд╕реЗ рд╕рд╣рдордд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА, рд╣рдо рдЕрднреА рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рдХреГрддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрд╡реАрдХреГрдд рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕реНрдХреЛрд░ рднреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП - рдПрдХ рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓реЗрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ @ mklement0 рдореЗрдВ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдХреЛрдИ рдЙрдкрдпреЛрдЧреА

рдЬрдм рднреА MSFT рдЯреАрдо рдПрдХ рд╣реА рдмрд╛рдд рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рджреЛрд╣рд░рд╛рддреА рд╣реИ, рддреЛ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЬрд┐рддрдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЙрдирдХреЗ рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрд╢рд╛рд╕рди рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдЙрди рдкрд░ рджрдмрд╛рд╡ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред _рдорд╛рдЗрдмреЗ рд╣рдо рдПрдХ рд╕рдордЭреМрддрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрд▓рд╕реА рдкреНрд░рд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рд╕рдордп рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реАрд▓рд┐рдП рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рддрд╛ рд╣реВрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ; рдпрджрд┐ рдЙрди рдирд┐рд░реНрдгрдпреЛрдВ рдореЗрдВ рдХреЛрдИ рд╕рдВрднрд╛рд╡рд┐рдд рджреГрд╢реНрдпрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд▓реЛрдЧ _will_ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирд┐рд░рд╛рд╢ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрд╕ рд╕рд┐рдХреНрдХреЗ рдХреЗ рджреЛрдиреЛрдВ рдУрд░ рдХрд╛рд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рджреЛрд╖ рдирд╣реАрдВ, рдмрд╕ рдпрд╣рд╛рдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╣реИ, рдЖрдИрдПрдордУред рддреЛ, рд╣рд╛рдБ, рдПрдХ рдкреНрд░рд╡рд╛рд╕ рдкрде рд╣реЛрдиреЗ рд╕реЗ рдЙрд╕ рджрд░реНрдж рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдиреАрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдХрдореА рд╣реЛрдиреЗ рдкрд░ рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреА рдЖрд╕реНрддреАрди рдКрдкрд░ рдХреНрдпрд╛ рд╣реИред ЁЯШЙ

@ mklement0 рдЖрдк рдмрд┐рд▓рдХреБрд▓ рд╕рд╣реА рд╣реИрдВ, рдФрд░ рдЗрддрдирд╛ рд╣реА рдХрд┐ рдореИрдВ рдЕрднреА рдЖрдкрдХреЗ рдореЗрдЯрд╛-рдкреЙрдЗрдВрдЯ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕реНрддрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╕реБрд░рдХреНрд╖рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдХреНрд╕рд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рд╕рдордп рди рд╣реЛред

рдореИрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдореЗрдЯрд╛-рдкреЙрдЗрдВрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐: рд╣рдорд╛рд░реЗ рдЯреЗрд▓реАрдореЗрдЯреНрд░реА рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ PowerShell 7 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдПрдХ рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ 6.2 рд╕реЗ 7.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ (6.2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ 2-рджрд┐рди рдХрд╛ рдХреВрджрдирд╛ 7.0 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ 8/3 рдкрд░ рд╢реБрд░реВ рдХрд░рдирд╛; рдпрд╣ рд╣рдорд╛рд░рд╛ рдПрдХрдорд╛рддреНрд░ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬреЛ рдмрд┐рдВрджреБ рдмрдирд╛рддрд╛ рд╣реИ)ред рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЧреИрд░-рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред

рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ: рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдФрд░ рдмреНрд░реЗрдХ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдЖрд╕рд╛рдиреА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмреНрд░реЗрдХ рдХреА рдЧрдВрднреАрд░рддрд╛ рдХрд╛ рд╡реНрдпрд╛рдкрд╛рд░ред рдпрд╣ рдПрдХ рдореМрдЬреВрджрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рдЪрд▓рд┐рдд рд╣реИ, рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛, рдФрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреБрд▓ рд╕рдлрд▓рддрд╛ рд╕реЗ рд▓реЗрдХрд░ рдХреБрд▓ рд╡рд┐рдлрд▓рддрд╛ рддрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЪрд░рдо рдорд┐рддрд╡реНрдпрдпрд┐рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рд╣рдо 7.1 рдореЗрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ 7.2 рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ (рдпрд╛рдиреА рд╣рдо рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рдорд┐рддрд┐ рдХреЗ рд╕рдордп рд╕реЗ рдЕрдзрд┐рдХ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВред)

рд╡рд┐рд╖рдп-рд╡рд┐рд╢реЗрд╖-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдк-рд╕рдорд┐рддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпреБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рд╕рдорд┐рддрд┐ рдХреЗ рд╕рд╛рде рдкрд░рд╛рдорд░реНрд╢ рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдореБрджреНрджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭ рд╣реИ?

рд╣рдо рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА рдХрд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдмреЗрд╣рдж рдХрд░реАрдм рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐, рдореИрдВ рдмреНрд▓реЙрдЧ рдХреЛ рдХреНрд░рд╛рдлреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЖрдк рд╢рд╛рдпрдж рдЬрд▓реНрдж рд╣реА рдХреБрдЫ рдирдП рд▓реЗрдмрд▓ рджрд┐рдЦрд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╣рдо рдЦреЗрд▓реЗрдВрдЧреЗ)ред

рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдзреИрд░реНрдп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд┐рддрд┐ рд╕реЗ рд╣рд░ рджреЛ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдЬрдм рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдЖ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рддреАрдЦрд╛ рдЬрд╡рд╛рдм рдорд┐рд▓рдирд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рдЙрддрдирд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣рд╛рдВ рд▓реЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреИрдХрд▓реЙрдЧ рдореЗрдВ, рдореБрдЭреЗ рдмреНрд▓реЙрдЧрд┐рдВрдЧ рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдорд┐рд▓рд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХрдореЗрдЯреА рдХреЗ рднреАрддрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдПрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрднреА рднреА рдиреАрдЪреЗ рдмреИрдардиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрдВрдк рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╢рд╛рдпрдж рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдорд┐рд▓реЗрдЧрд╛ред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдмрд╣реБрдд рджреВрд░ рддрдХ рд░реЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реАред рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдореЗрдЯрд╛-рдЗрд╢реНрдпреВ рдмрди рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдирд┐рд░рд╛рд╢рд╛ рдХреЛ рдореИрдВ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХреВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХрдореНрдпреБрдирд┐рдЯреА рдХреЙрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдореБрдЭреЗ рдХреЙрд▓ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдЧрд╛)ред

рдореЗрдЯрд╛-рдкреЙрдЗрдВрдЯ рдкрд░ рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд рдЯрд┐рдкреНрдкрдгреА: рдореИрдВ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, @joeyaielloред

рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрдВрднреАрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ: рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрдпрд╛рдиреЛрдВ рдкрд░ рд▓рдЧрддрд╛ рд╣реИ:

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореМрдЬреВрдж рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ

рдмрдирд╛рдо

рдпрд╣ рдореМрдЬреВрджрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ рдмреЗрд╣рдж рдкреНрд░рдЪрд▓рд┐рдд рд╣реИ, рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ

рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдЪрд▓рд┐рдд рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдЕрдЬреАрдмрддрд╛ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдЕрдВрддрддрдГ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░рдг рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рд╕рднреА рдореМрдЬреВрджрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЯреВрдЯ рдЬрд╛рдПрдВрдЧреЗред

рдпрджрд┐ рдЗрд╕рд╕реЗ рдмрдЪрдирд╛ рд╕рд░реНрд╡реЛрдкрд░рд┐ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реНрд╡ рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рддрд░реАрдХрд╛ рд╣реИ:

_new рдСрдкрд░реЗрдЯрд░ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди_ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреИрд╕реЗ рдХрд┐ ie рдлрд╝рдВрдХреНрд╢рди Native рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

A _function_ рдЬреИрд╕реЗ ie рд▓реЛрдЧреЛрдВ рдХреЛ _minimal fuss_, _as рдПрдХ рд╕реНрдЯреЙрдкрдЧреИрдк_ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, _language_ рдХреЛ рдирдП рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рддрддреНрд╡ (рдСрдкрд░реЗрдЯрд░) рдХреЗ рд╕рд╛рде рдмреЛрдЭ рдХрд┐рдП рдмрд┐рдирд╛, рдЬрд┐рд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ raison d'├кtre рд╣реЛрдЧрд╛ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдмрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЛрдбрд╝ рджрд┐рдпрд╛:

  • рд╕реНрдЯреЙрдкрдЧреИрдк рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ (_experimental_ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛) рдХреЗ рд▓рд┐рдП _officially approed_ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
  • рдЬрдм рддрдХ рд╕реНрдЯреЙрдкрдЧреИрдк рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддрдм рддрдХ рдЗрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдФрд░ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ / рдЬрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕реЗ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рди рд╣реЛред
  • рдЕрдм рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдирдпрд╛ рдХреЛрдб рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдпрд╛рдиреА рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕реНрдЯреЙрдкрдЧреИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдиреНрдпреВрдирддрдо рдЙрдкрджреНрд░рд╡ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛

рд╣рдо # 13428 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреЛрдж рд▓реЗрдиреЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдЗрдВрдЬрди рдореЗрдВ @ mklement0 рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@Dabombber

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреА "рд╕рд╣рд╛рдпрдХрддрд╛" рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореИрдВ рдкреЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЙрд▓ "рдмрд╕ рдХрд╛рдо" рдХрд░рддреЗ рд╣реИрдВ - рд╡реЗ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрд░рд╛рдЬрдХрддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕рд╛рд░ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдврд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдиреНрдпрд╛рдпрд╕рдВрдЧрдд рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рд┐рд░рдХреНрд╖рдг _legacy_ рдирд┐рд╖реНрдкрд╛рджрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдирдП рдмрдирд╛рдП рдЧрдП Microsoft C / C ++ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ; рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, --% ред

рдирд┐рдЬреА рддреМрд░ рдкрд░, рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ foo foo.bat foo.cmd foo="bar none" рддрд░реНрдХреЛрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, "foo=bar none" рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рдЬреЛ рдХрд┐ рд╕рдореНрдореЗрд▓рди-рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИрдВред

рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдкрд╡рд╛рджреЛрдВ, рдЬреИрд╕реЗ &[bat] рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдлрд╝реЙрд░реНрдо рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, --% рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рд╡рд┐рдВрдбреЛрдЬ-рдУрдирд▓реА) рдХреИрдЪ-рдСрд▓ рдЯреВрд▓ рдмрд┐рд▓рдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдЖрдк рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЬреЛ рднреА рд▓рдХреНрд╖реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ, рдЕрдкрд░рдВрдкрд░рд╛рдЧрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЖрд╡рд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

рдзреНрдпрд╛рди рджреЗрдВ:

  • рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╡реЗ _on Windows_ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ; рдпреВрдирд┐рдХреНрд╕ рдкрд░, рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ProcessStartInfo.ArgumentList рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

  • рдХрдо рд╕реЗ рдХрдо рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рдпреЗ рдЖрд╡рд╛рд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИрдВред

  • рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ _after_ PowerShell рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ, (Windows-only) рдЕрдиреБрд╡рд╛рдж-рд╕реЗ-рдкреНрд░рдХреНрд░рд┐рдпрд╛-рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЪрд░рдг рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрд░реНрдерд╛рдд, PowerShell рдХрд╛ рдЕрдкрдирд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдФрд░ _shouldn't_ be , @ yecril71plред

  • рддрдм рдЗрди рдЖрд╡рд╛рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рджреЗрд╢реА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
    --% - рдпрд╛, Native рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, ins / Invoke-NativeShell , рдЬрд┐рд╕рд╕реЗ рдХреЙрд▓ рдореЗрдВ PowerShell рдЪрд░ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд╛рди рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

    • $ # $ 15 $ # $ # $ $ $ $ $ $ $ $ $ $ $ dbea Debug-ExecutableArguments Native ред

рдЖрд╡рд╛рд╕ рдХреА рд╕реВрдЪреА:

  • рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдорд╣рддреНрд╡ рд╣рд╛рдИ-рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реАрдПрд▓рдЖрдИ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рд╣реИ рдЬреЛ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ _ рдЕрдкрдиреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ_, рдЬреИрд╕реЗ az.cmd Azure рдХреЗ рд▓рд┐рдП)ред

    • рд╕рднреА рддрд░реНрдХреЛрдВ рдореЗрдВ рдПрдВрдмреЗрдбреЗрдб рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, "" ( \" ) рдХреЗ рд░реВрдк рдореЗрдВ рдмрдЪ рдЧрдП рд╣реИрдВред
    • рдХреЛрдИ рднреА рддрд░реНрдХ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдпрд╛ cmd.exe рдореЗрдЯрд╛рдЪреИрдЯрд░реНрд╕ рдЬреИрд╕реЗ & рдХреЛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ PowerShell рдХреЗрд╡рд▓ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рддрд░реНрдХ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИ); рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PowerShell рджреНрд╡рд╛рд░рд╛ a&b рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╢рдмреНрджрд╢рдГ рддрд░реНрдХ рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ "a&b" рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
  • рдЙрдЪреНрдЪ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ msiexec.exe / msdeploy.exe рдФрд░ cmdkey.exe (рдЙрдирдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдВрдЧ рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд┐рдирд╛):

    • рдХрд┐рд╕реА рднреА рдЖрд╣реНрд╡рд╛рди рдореЗрдВ рдирд┐рдореНрди рд░реВрдкреЛрдВ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ; <word> рдЕрдХреНрд╖рд░реЛрдВ, рдЕрдВрдХреЛрдВ рдФрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕реЗ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

      • <word>=<value with spaces>
      • /<word>:<value with spaces>
      • -<word>:<value with spaces>
    • рдпрджрд┐ рдРрд╕рд╛ рддрд░реНрдХ рдореМрдЬреВрдж рд╣реИ:

      • рд╕рднреА рддрд░реНрдХреЛрдВ рдореЗрдВ рдПрдВрдмреЗрдбреЗрдб рдбрдмрд▓ рдЙрджреНрдзрд░рдг, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, "" ( \" ) рдХреЗ рд░реВрдк рдореЗрдВ рдмрдЪ рдЬрд╛рддреЗ рд╣реИрдВред - https://github.com/PowerShell/PowerShell/pull/13482#issuecomment -677813167 рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рджреБрд░реНрд▓рдн рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ <value with spaces> рдХрд╛ _embedded_ " рдЪрд╛рд░реНрдЯ рд╣реИред --% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЬреИрд╕реЗ,
        msiexec ... --% PROP="Nat ""King"" Cole"
      • рдХреЗрд╡рд▓ <value with spaces> рд╣рд┐рд╕реНрд╕рд╛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИ, рди рдХрд┐ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдВрдкреВрд░реНрдг (рдмрд╛рдж рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╛рд╡рд░рд╢реЗрд▓ - рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ); рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PowerShell рджреНрд╡рд╛рд░рд╛ foo=bar none рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╢рдмреНрджрд╢рдГ рддрд░реНрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ foo="bar none" рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ (рдмрдЬрд╛рдп "foo=bar none" )ред
    • рдзреНрдпрд╛рди рджреЗрдВ:

      • рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛрддрд╛ рд╣реИ рддреЛ _not_ msiexec CLI рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдиреНрд╡реЗрдВрд╢рди-рдкрд╛рд▓рди CLIs рд╕рдордЭрджрд╛рд░реА рд╕реЗ <word>="<value with spaces>" рдФрд░ "<word>=<value with spaces>" _equivalent_ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рд╢рдмреНрджрд╢рдГ <word>=<value with spaces> рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ

      • рдЗрд╕реА рддрд░рд╣, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕рд╛ "" \" рд╕рд╛рде " рдЪрд╛рд░реНрдЯ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рдЕрдкрдиреЗ CLI, рд░реВрдмреА рдФрд░ рдкрд░реНрд▓ (_not_) рдХреЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рдеред рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реАрдПрд▓рдЖрдИ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрд╡рд╛рд╕ рдХрдо рд╕реЗ рдХрдо рд╕рд╛рд░реНрдердХ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реВрдмреА рдФрд░ рдкрд░реНрд▓ рднреА рдореБрд╢реНрдХрд┐рд▓ рдХреЛрдбрд┐рдВрдЧ рдХрд░реЗрдВрдЧреЗ)ред https://github.com/PowerShell/PowerShell/pull/13482#issuecomment -+ремрен,ренрео,резрей,резремрен рд╢реЛ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдХрд┐ CommandLineToArgvW WinAPI рд╕рдорд╛рд░реЛрд╣ _not_ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ "" -escapingред

рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ ProcessStartInfo.ArgumentList рд╕рд╛рде рднреА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Microsoft C / C ++ рдХрдиреНрд╡реЗрдВрд╢рди (рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ \" " -рд╕реЗрд╕реНрдлрд╝рд┐рдВрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ) рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред


ie рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ ( 1.0.7 ) Native рдореЙрдбреНрдпреВрд▓ рдЗрди рдЖрд╡рд╛рд╕реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдЯреВрдЯреЗ рд╣реБрдП рддрд░реНрдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛) , PowerShell рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП 3 рдФрд░ рдКрдкрд░ ( Install-Module Native )ред

рдореИрдВ рдЖрдкрдХреЛ рдФрд░ рд╕рднреА рдХреЛ рдпрд╣рд╛рдВ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рджрд╛рд╡реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЙрд▓ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдХреЗ рд▓рд┐рдП "рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╕реАрдорд╛рдПрдБ:

  • рдиреЛрдЯ: рдпреЗ рддрдХрдиреАрдХреА рд╕реАрдорд╛рдПрдБ ie _function_ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИрдВ, (рдЗрдВрдЬрди рдореЗрдВ рдПрдХ рдЙрдЪрд┐рдд рдирд┐рд░реНрдзрд╛рд░рдг рд╣реА _not_ рдореЗрдВ рдпреЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реИрдВ):

    • рд╣рд╛рд▓рд╛рдВрдХрд┐ $LASTEXITCODE рдареАрдХ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ 'рдПрдЧреНрдЬрд┐рдЯ рдХреЛрдб' рдкрд░ рд╕реЗрдЯ рд╣реИ, $? рд╣рдореЗрд╢рд╛ $true рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рд╡рд░реНрддрдорд╛рди рдореЗрдВ $? рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдХреЛ рдЧреНрд░реАрди-рд▓рд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - https://github.com/PowerShell/PowerShell/issues/10917#issuecomment -550550490 рджреЗрдЦреЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ ie рд╕рд╛рд░реНрдердХ рд░реВрдк рд╕реЗ && рдФрд░ || , && , рдкрд╛рдЗрдкрд▓рд╛рдЗрди-рдЪреЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
      рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ _Borting_ рдПрдХ рдиреЙрдирдЬрд╝рд░реЛ рдПрдЧреНрдЬрд╝рд┐рдЯ рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ iee рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    • -- рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдореЗрд╢рд╛ PowerShell рдкреИрд░рд╛рдореАрдЯрд░ рдмрд╛рдЗрдВрдбрд░ рджреНрд╡рд╛рд░рд╛ "рдЦрд╛рдпрд╛" рдЬрд╛рддрд╛ рд╣реИ; рдмрд╕ рдЗрд╕реЗ _twice_ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -- рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп ( foo -- -- рдмрдЬрд╛рдп foo -- ) рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

    • , рд╕рд╛рде рдПрдХ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдЯреЛрдХрди рдХреЛ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреБрдЫ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'a,b' рдмрдЬрд╛рдп a,b ; рдЗрд╕реА рддрд░рд╣, -foo:bar (рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдирд╛рдорд┐рдд PowerShell рддрд░реНрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ) рдХреЗ рд░реВрдк рдореЗрдВ '-foo:bar' (рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рдмрдЧ рдХреЗ рд▓рд┐рдП рдмрдХрд╛рдпрд╛ рд╣реИ: # 6360); рдЗрд╕реА рддрд░рд╣ '-foo.bar must be passed as ' -foo.bar'` (рдПрдХ рдФрд░ рдмрдЧ, рдЬреЛ рдмрд╛рд╣рд░реА рдХреЙрд▓рдЧрд░реНрд▓реНрд╕ рдХреЛ рднреА рд╕реАрдзреЗ рдХреЙрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ: # 6291)

  • рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ PowerShell _Core_ рдореЗрдВ рдордЬрдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред рд╕рдордп-рд╕рдордп рдкрд░ _Windows PowerShell_ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг, рдРрд╕реЗ рдХрд┐рдирд╛рд░реЗ рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдХреЗрд╡рд▓ рджреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ:

    • msiexec -рд╕реНрдЯрд╛рдЗрд▓ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд▓рд┐рдП рдЖрдВрд╢рд┐рдХ-рдЙрджреНрдзреГрдд рдЖрд╡рд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг 3 рдФрд░ 4 рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░реЗ рддрд░реНрдХ рдХреЛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ v5.1 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

    • "" -рдбрд┐рдлреЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ \" рдЖрд╡рд╢реНрдпрдХ рд╣реИ (PowerShell CLI, рдкрд░реНрд▓, рд░реВрдмреА), рдПрдХ рдЯреЛрдХрди рдЬреИрд╕реЗ 3" of snow рдЧрд▓рддреА рд╕реЗ _3_ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░рд╢реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ; рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рдЖрд░рдВрднрд┐рдХ " рд╡рд░реНрдгреЛрдВ рд╡рд╛рд▓реЗ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдВрддрд░рд┐рдХреНрд╖ рд╡рд░реНрдг рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред


Windows 10 рдкрд░ PowerShell Core 7.1.0-preview.5 рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг:

рдиреЛрдЯ: dbea ( Debug-ExecutableArguments ) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрдХ / рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рддрд░реНрдХ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред

рд╡рд░реНрддрдорд╛рди, рдЯреВрдЯреЗ рд╣реБрдП рддрд░реНрдХ:

  • рдПрдХ рдХрдиреНрд╡реЗрдВрд╢рди-рдХрдВрдкреНрд▓реЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ dbea рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
# Note the missing 2nd argument and the effective loss of embedded double quotes,
# due to the embedded " chars. not having been escaped.
PS> dbea -- 'a&b' '' '{ "foo": "bar" }'

2 argument(s) received (enclosed in <...> for delineation):

  <a&b>
  <{ foo: bar }>

Command line (helper executable omitted):

  a&b  "{ "foo": "bar" }"
  • рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХреЙрд▓рд┐рдВрдЧ:

-UseBatchFile рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dbea рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ _batch file_ рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХреЛрдВ рдХреЛ рдиреЛрдЯ рдХрд░реЗрдВред

# Note that only *part of the first argument* is passed and that the `&` is interpreted as cmd.exe's
# statement separator, causing `b` to be run as a command (which fails).
PS> dbea -UseBatchFile -- 'a&b' '' '{ "foo": "bar" }'

1 argument(s) received (enclosed in <...> for delineation):

  <a>

'b' is not recognized as an internal or external command,
operable program or batch file.
  • msiexec -рд╕реНрдЯрд╛рдЗрд▓ CLI, cmdkey.exe рдХреЙрд▓ рдХрд░рдирд╛:
# The call fails, because `cmdkey.exe` requires the password argument to 
# to be quoted exactly as `/password:"bar none"` (double-quoting of the option value only), 
# whereas PowerShell - justifiably - passes `"/password:bar none"` (double-quoting of the whole argument).
PS> cmdkey.exe /generic:foo /user:foo /password:'bar none'

The command line parameters are incorrect.

ie рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛:

dbea рдХреЙрд▓ рдореЗрдВ -ie рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ рдХрд┐ ie рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд╛рд▓рд╛рди рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

  • рдПрдХ рдХрдиреНрд╡реЗрдВрд╢рди-рдХрдВрдкреНрд▓реЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ dbea рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
# OK
# Note that the empty 2nd argument is correctly passed, and that \" is used for embedded "-escaping.
PS> dbea -ie -- 'a&b' '' '{ "foo": "bar" }'

3 argument(s) received (enclosed in <...> for delineation):

  <a&b>
  <>
  <{ "foo": "bar" }>

Command line (helper executable omitted):

  a&b "" "{ \"foo\": \"bar\" }"
  • рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХреЙрд▓рд┐рдВрдЧ:
# OK
# - `a&b` was enclosed in "...", due to the presence of metacharacter `&`
# - "" is used for escaping of embedded " chars.
# Note that `echo %1`, for instance, prints the argument exactly as passed on the command line, including quoting.
# `echo %~1` strips the surrounding double quotes, but embedded escaped ones still print as "".
# However, if you pass these arguments (`%*`) through to convention-compliant CLIs, they are parsed correctly.
PS> dbea -ie -UseBatchFile -- 'a&b' '' '{ "foo": "bar" }'

3 argument(s) received (enclosed in <...> for delineation):

  <"a&b">
  <"">
  <"{ ""foo"": ""bar"" }">
  • msiexec -рд╕реНрдЯрд╛рдЗрд▓ CLI, cmdkey.exe рдХреЙрд▓рд┐рдВрдЧ:
# The call now succeeds, because `ie` ensure the value-only double-quoting that cmdkey.exe requires.
# (Use `cmdkey /del:foo` to remove the credentials again.)
PS> ie cmdkey.exe /generic:foo /user:foo /password:'bar none'

CMDKEY: Credential added successfully.

рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ dbea рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓реНрдп-рдХреЗрд╡рд▓ рдбрдмрд▓-рдХреЛрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

PS> dbea -ie -- cmdkey.exe /generic:foo /user:foo /password:'bar none'

  <cmdkey.exe>
  </generic:foo>
  </user:foo>
  </password:bar none>

Command line (helper executable omitted):

  cmdkey.exe /generic:foo /user:foo /password:"bar none"

рдирд┐рдореНрди рдХреЛрдб рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ:

{ PARAM($A) $A } | OUT-FILE A.PS1
PWSH A.PS1 -A:(1,2)

1

@JamesWTherher рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЙрдард╛рдП рдЧрдП рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдорд╛рдиреНрдп рд╣реИ

рдХреНрдпрд╛ рдЙрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рдХрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╣реИ? рдЕрдЧрд░ рд╣рдо рдкреАрдЖрд░ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ IMO рдХрд╛ рдЬрдЯрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛ред рдЬрдЯрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рдерд╛ рдХрд┐ рдХреИрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдмрдврд╝реЗред рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ ...ред

рдпрд╣ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, @ рд╕реНрдЯреАрд╡-рдПрдордПрд╕рдПрдлрдЯреА - рдпрд╣рд╛рдБ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ _all_ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдп рд╣реИ? V7.1 рдХреЗ рд▓рд┐рдП, рдЖрдЦрд┐рд░? рдФрд░ рдореИрдВ рджреВрд╕рд░реА @TSlivede рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВред

@ yecril71pl , рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдЦреЛрдЬ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рдЕрдкрдиреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рдмрд╛рд╣реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП _some_ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рд╣реИ), рди рдХрд┐ рдХреИрд╕реЗ рджреЗрд╢реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ _a__ рдкрд╛рд░реНрд╕рд┐рдВрдЧ (рдЬреЛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ) рд╕реЗ)ред

рдпреВрдирд┐рдХреНрд╕ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг:

PS> printf '<%s>\n' -a:(1,2,3)
<-a:1>
<2>
<3>

рдпрд╣реА рд╣реИ, рдХреЗрд╡рд▓ _first_ рд╕рд░рдгреА рддрддреНрд╡ рд╕реАрдзреЗ -a: рдЬреБрдбрд╝рд╛ рдерд╛, рджреВрд╕рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ __ PowerShell рдкреИрд░рд╛рдореАрдЯрд░, рд▓реЗрдХрд┐рди рдирд╣реАрдВ рд╣реИрдВ:

рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ _PowerShell_ рдХрдорд╛рдВрдб рдкрд░ рдХреЙрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ $args / @args : # 6360

  • & { $args.Count; $args } -foo:bar рдкреИрджрд╛рд╡рд╛рд░ 2, '-foo:', 'bar'

# 6291 рднреА рд╣реИ, рдЬреЛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдХрдорд╛рдВрдб рдФрд░ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ ( . рдиреЛрдЯ рдХрд░реЗрдВ)ред

  • & { $args.Count; $args } -foo.bar рдкреИрджрд╛рд╡рд╛рд░ 2, '-foo', '.bar'

рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдирдВрдЧреЗрдкрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ (...) рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ (...) рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ _separate_ рддрд░реНрдХ рдмрдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рддрддреНрд╡ _is_ printf рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИ
& { $args.Count; $args.ForEach({ "$_" }) } foo('bar', 'baz') рдкреИрджрд╛рд╡рд╛рд░ 2, 'foo', 'bar baz' , рджреВрд╕рд░рд╛ рддрд░реНрдХ 'bar', 'baz' рдХреА рдХрдареЛрд░рддрд╛ рд╣реИред

рдЬрдм PowerShell рдХреЛ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд▓рд┐рдП -A:(1,2) рдкрд╛рд╕ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ -A: рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдФрд░ (1,2) рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕реЗ '1 2' рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░реНрд╢рд▓реНрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреЙрд╡рд░рд╢реЗрд▓ рдЖрд╣реНрд╡рд╛рди рдХреЗ рдореВрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдХрд░, рд╣рдореЗрдВ 'рдП: 1 2' рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо 'рдП: "1 2" рд╣реЛрдЧрд╛ред " рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдПрдХ рддреБрдЪреНрдЫ рдЪреВрдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рдХрд┐ @ yecril71pl рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ, рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ "рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдореЗрдВ рд╕рд░рдгреА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ" рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ)ред

рдЬрдм PowerShell рдХреЛ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд▓рд┐рдП -A: (1,2) рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ -рдП: рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдФрд░ (1,2) рдПрдХ рд╕рд░рдгреА рд╣реИ

рд▓рдЧрднрдЧ: -A: рдПрдХ рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдФрд░ рд╕рд░рдгреА рдЙрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рд╣реИ (рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рд╕рд╛рдордиреЗ - рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВ, рдХрд┐ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдХрд┐ рд╕рд░рдгреА рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдореВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рддрд░реНрдХ рдХреЗ рд▓рд┐рдП (рд▓рдЧрднрдЧ) рд╣рдореЗрд╢рд╛ рдЫрдкрддреЗ рд╣реИрдВ, рддрдм рднреА рдЬрдм $ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ @ рдФрд░ рднрд▓реЗ рд╣реА рд╕рд░рдгреА (1,2) рдЬреИрд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ printf '<%s>\n' -a:('a b',2) : рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ a b рдореЗрдВ рдПрдХ рдРрд╕рд╛ рд╕реНрдерд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА 2 рдЕрдЧрд▓реЗ рд╕рд░рдгреА рддрддреНрд╡ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рд░рдгреА рд╕реНрдкреНрд▓рд┐рдЯ рд╣реЛрддреА рд╣реИ, 2 рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред


рдЬрд╛рджреВ NativeCommandParameterBinder.cs рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ

рд▓рд╛рдЗрди рдореЗрдВ 170 рд╢рдХреНрддрд┐рдпрд╛рдВ рд╡рд░реНрддрдорд╛рди рддрд░реНрдХ рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИрдВред

IEnumerator list = LanguagePrimitives.GetEnumerator(obj);

рдпрджрд┐ list null , рддреЛ рд╢рдХреНрддрд┐рдХрд▓реНрдк рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рд╕рдВрднрд╡рддрдГ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░) lpCommandLine рдореЗрдВред

рддрддреНрд╡реЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди ( рд▓рд╛рдЗрди 449 ) рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдпрджрд┐ рд╕рд░рдгреА рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдерд╛
( printf '<%s>\n' -a:1,2 )ред
рдлрд┐рд░ рдкрд╛рд╡рд░рдкреНрд▓реЗ lpCommandLine рдореЗрдВ рдЙрд╕реА рд╡рд┐рднрд╛рдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрди рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЬрдм рдореИрдВ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдПрдХ рдкреАрдЖрд░ рдХреА рдЙрдореНрдореАрдж рд╣реЛрддреА рд╣реИред рдЕрдЧрд░ рдпрд╣ 7.1 рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд▓реЗ рд▓реЗрдВрдЧреЗ, рдЕрдиреНрдпрдерд╛ рдпрд╣ 7.2 рд╣реЛрдЧрд╛ред рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рд╡рд╣ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рд╢рд╛рдпрдж рдЬреЛ рдХреБрдЫ рдорджрдж рдХрд░реЗрдЧрд╛ рдЙрд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдкреЗрд╕реНрдЯрд░ рдкрд░реАрдХреНрд╖рдг ( testexe -echoargs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ build.psm1 рд╕реЗ publish-pstesttools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдореИрдВ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдкреАрдЖрд░ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ

рдпрд╣ рдареАрдХ рдпрд╣реА рд╣реИ, рдЬреЛ рдореИрдВ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдХреГрдкрдпрд╛ рд╡рд╣ рдХреЛрдб рджрд┐рдЦрд╛рдПрдВ рдЬреЛ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ (PR рдкреНрд░рдЧрддрд┐ рдореЗрдВ рдХрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ)ред

рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ, рд╡рд╣ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣

@TSlivede , рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪреВрдВрдХрд┐ PowerShell _CLI_ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп - -A:(1,2) рдкрд╛рд░реНрд╕ _before_ рд╣реИ, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЯреЛрдХрди рдЕрдВрддрддрдГ _ame_ -A рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдмрдВрдз рдЬрд╛рдПрдЧрд╛ - рдРрд╕рд╛ рдкреИрд░рд╛рдореАрдЯрд░ _eventually_ рдЦреЗрд▓рдиреЗ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрдХрд╕реНрдорд┐рдХ рд╣реИред

@ yecril71pl :

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ -A: рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ

рдирд╣реАрдВ, рдпрд╣ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ _ PowerShell рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддрд░рд╣ _look рд╣реЛрддрд╛ рд╣реИред

PowerShell рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ $args рдХрд░рддрд╛ рд╣реИ (рд╕рд╛рде рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШреЛрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ _ рдмрд╛рд╣реНрдп рд░реВрдк рд╕реЗ рдмрд╛рд╣реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП _ (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рд░рд╣рддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ _first_ рддрддреНрд╡)ред

рдпрджрд┐ рдЖрдк -- рдкрд╣рд▓реЗ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ -- рднреА рдкрд╛рд╕ рд╣реЛрдЧрд╛, рдЬреЛ рдХреЗрд╡рд▓ _PowerShell_ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:

PS> printf '<%s>\n' -- -a:(1,2,3)
<-->   # !! not removed
<-a:>
<1>    # array elements are *all* now passed as indiv. arguments, because (...) output is separate (splatted) argument
<2>
<3>

рдпрджрд┐ рддрд░реНрдХ _does't_ рдПрдХ PowerShell рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ ( (...) рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдЕрд▓рдЧ рддрд░реНрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИ) рдмрд╛рд╣рд░реА рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдХ рдХрд░рддрд╛ рд╣реИ (рдПрдХ _array_ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде, рдмрд┐рдЦрд░ рдЬрд╛рдиреЗ рдЕрд░реНрдерд╛рдд рдмрд╛рд╣рд░реА-рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрд░реНрдХ)ред

# Note: No "-" before "a:" -> output from `(...)` becomes separate argument(s)
PS> printf '<%s>\n' a:(1,2,3)
<a:>
<1>
<2>
<3>

рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _consistently_ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдПрдХ (...) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ _always_ рдПрдХ рдЕрд▓рдЧ рддрд░реНрдХ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдП - # 13488 рджреЗрдЦреЗрдВред

рд╕рд░рдгреА _stringified_ рдХреЗ рд╕рд╛рде рдПрдХрд▓ рддрд░реНрдХ '-A:1 2 3' рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, (n рдирд┐рд╣рд┐рдд) _expandable string_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЛ (...) _and_ - рдХреЗ рдмрдЬрд╛рдп $(...) рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ - рд╡рд░реНрддрдорд╛рди рдореЗрдВ рднреА "..." :

PS> printf '<%s>\n' "-a:$(1,2,3)"  # quotes shouldn't be needed; `-a:"$(1,2,3)"` would work too.
<a:1 2 3> # SINGLE argument with stringified array.

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ _shouldn't_ рдХреЛ рднреА "..." рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ рдлрд┐рд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЯреЛрдХрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг _look_ рдЬреИрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ (рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ _both_ PowerShell рдФрд░ рдмрд╛рд╣рд░реА-рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЙрд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ - # 13489 рджреЗрдЦреЗрдВ); рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмреЛрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

# Anomaly due to looking like a parameter: $(...) output becomes separate argument
PS> Write-Output -- -a:$(1,2,3)
-a:
1
2
3

# Otherwise (note the absence of "-"): no quoting needed; treated implicitly like 
# "a:$(1,2,3)"
PS> Write-Output -- a:$(1,2,3)
a:1 2 3  # SINGLE argument with stringified array.

рддрд░реНрдХ рдореЛрдб рдореЗрдВ рдпреМрдЧрд┐рдХ рдЯреЛрдХрди рдХреА рджреБрдирд┐рдпрд╛ рдПрдХ рдЬрдЯрд┐рд▓ рдПрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ - # 6467 рджреЗрдЦреЗрдВред

@ SteveL-MSFT

рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ, testexe -echoArgs рдХреЗрд╡рд▓ рдЙрди рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрд░реНрдХреЛрдВ рдХреЛ рдЫрд╛рдкрддреЗ рд╣реИрдВ рдЬреЛ .NET рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрдЪреНрдЪреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди (рд╡рд┐рдВрдбреЛрдЬ рдкрд░) рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рд░реЙ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗред

рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрдпрдирд╛рддреНрдордХ рдЙрджреНрдзрд░рдг рдХреЗ рд╕рд╛рде рдЖрд╡рд╛рд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ msiexec -рд╕реНрдЯрд╛рдЗрд▓ рд╕реАрдПрд▓рдЖрдИ - рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрд╡рд╛рд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреА рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ PROP='foo bar' рдХреЛ PROP="foo bar" рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореВрд▓реНрдп рднрд╛рдЧ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рджреЛрд╣рд░реЗ-рдЙрджреНрдзрд░рдг рдХреЗ рд╕рд╛рдеред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдЪреНрдЪреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, testexe рдХреЛ .NET _Core_ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ .NET Core _recreates рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди_ рд╣реИ рдЬреЛ рдПрдореНрдмреЗрдбреЗрдб " рд▓рд┐рдП рд╣рдореЗрд╢рд╛ \" -рд╕реБрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред " рд╡рд░реНрдгред, рднрд▓реЗ рд╣реА "" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рддрд░реНрдХ рджреЛрд╣рд░реЗ-рдЙрджреНрдзреГрдд рдереЗ рдФрд░ рдЬреЛ рдирд╣реАрдВ рдереЗ - рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП, https://github.com/ рджреЗрдЦреЗрдВ рдбреЙрдЯрдиреЗрдЯ / рд░рдирдЯрд╛рдЗрдо / рдЗрд╢реНрдпреВ / 11305 # рдЬрд╛рд░реАрдХрд░рдг -674554010

рдХреЗрд╡рд▓ рдПрдХ .NET _Framework_- рд╕рдВрдХрд▓рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп Environment.CommandLine рдореЗрдВ рд╕рд╣реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП testexe рдХреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдФрд░ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) рдХрдЪреНрдЪреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ)ред

рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╛рд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг _batch_ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ 'a&b' "a&b" рдФрд░ 'a"b' "a""b" рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ, рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгред

.NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП @ mklement0 рд╕рдВрдХрд▓рди рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рддрд╣рдд рдЪрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреАрдПрд╕ рд░реЗрдкреЛ рд╕реЗ рдмрд╛рд╣рд░ рдХреЗ рд╕рднреА рдореВрд▓ рдХреЛрдб рд╕рдВрдХрд▓рди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ... рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рджреЗрд╢реА рдЯреЗрд╕реНрдЯреАрдУ рд╣реИ (рдЬрд┐рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ, рдореИрдХрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдирдХреНрд╕ рдбрд┐рд╕реНрдЯреНрд░реЛрд╕ (рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд▓реНрдкрд╛рдЗрди рдХреА рддрд░рд╣)ред рдЯреЗрд╕реНрдЯрд┐рдЙ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧреЗрдЧрд╛ ...

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдХреНрдпрд╛ рд╣рдо рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ / macOS рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЖрд░реНрдЧрди рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

#!/bin/bash
for i; do
   echo $i
done

рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ред

рдПрдХ .js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

console.log(process.execArgv.join('\n') рдпрд╛ рдЬреЛ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдкрдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИ
рдЙрддреНрдкрд╛рджрди рдЕрдЪреНрдЫрд╛ рд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

@ cspotcode , рдХрдЪреНрдЪреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ WinAPI рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@ SteveL-MSFT:

рд╡рд┐рдВрдбреЛрдЬ рдкрд░ , рдЖрдк рдЕрдкрдиреЗ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ _Windows PowerShell_ рдХреЗ рд╕рдВрдХрд▓рди рдХреЛ рд╕реМрдВрдк рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдореИрдВ dbea рд╣реВрдВ; рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ .NET _Framework_ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрдЪреНрдЪреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди (рдХреЗрд╡рд▓), ./rawcmdline.exe рдЧреВрдБрдЬрддрд╛ рд╣реИ:

powershell.exe -noprofile -args ./rawcmdline.exe -c {

  param([string] $exePath)

  Add-Type -ErrorAction Stop -OutputType ConsoleApplication -OutputAssembly $exePath -TypeDefinition @'
using System;
static class ConsoleApp {
  static void Main(string[] args) {
    Console.WriteLine(Environment.CommandLine);
  }
}
'@

}

рдирдореВрдирд╛ рдХреЙрд▓:

PS> ./rawcmdline.exe --% "a&b" PROP="foo bar"
"C:\Users\jdoe\rawcmdline.exe"  "a&b" PROP="foo bar"

_Batch file_ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЕрдкрдиреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рддрд╛ рд╣реИ, dbea рднреА рдорд╛рдВрдЧ рдкрд░ рдПрдХ рдмрдирд╛рддрд╛ рд╣реИ ред

рдпреВрдирд┐рдХреНрд╕ рдкрд░ , рдПрдХ рд╕рд░рд▓ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдЖрдк рдПрдХ рддрджрд░реНрде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

@ рдкреЙрд╡рд░рд╢реЗрд▓ / рдкреЙрд╡рд░рд╢реЗрд▓ -рдХрдореЗрдЯреА рдиреЗ рдЖрдЬ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА, рд╣рдо рдЖрд░реНрдЧреНрд╕ рдХреЗ рдЕрд░реИ рдХреЛ рд╡рд╛рдкрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдореЗрдЯрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдкрд╛рд╕ рдХрд┐ рдирдИ рд╕рд░рдгреА рдореЗрдВ ProcessStartInfo рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдФрд░ рдорд╛рди рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдЬреНрдЮрд╛рдд рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрднреА рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдкреАрдЖрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдбрдмреНрд▓реНрдпреВрдЖрдИрдкреА рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ: https://github.com/PowerShell/PowerShell/pull/13482

PS, @ рд╕реНрдЯреАрд╡рдПрд▓-рдПрдордПрд╕рдПрдлрдЯреА, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрдЪреНрдЪреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдмреЗрд╢рдХ, рд╡рд┐рдВрдбреЛрдЬ рдкрд╛рд╡рд░рд╕реНрд▓реЗ / .NET _Framework_ рдХреЗ рд╕рдВрдХрд▓рди рдХреЛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрджрд╛ (_- рдордВрдЪ) рдХрдВрд╕реЛрд▓ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ (рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо-рд╕рд╢рд░реНрдд) рдкреА / рдЗрдирд╡реЙрдЗрд╕ рдХреЙрд▓ GetCommandLine() WinAPI рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

using System;
using System.Runtime.InteropServices;

namespace demo
{
  static class ConsoleApp
  {
    [DllImport("kernel32.dll")]
    private static extern System.IntPtr GetCommandLineW();

    static void Main(string[] args)
    {
      Console.WriteLine("\n{0} argument(s) received (enclosed in <...> for delineation):\n", args.Length);
      for (int i = 0; i < args.Length; ++i)
      {
        Console.WriteLine("  <{0}>", args[i]);
      }

      // Windows only: print the raw command line.
      if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
      {
        Console.WriteLine("\nCommand line:\n\n  {0}\n", Marshal.PtrToStringUni(GetCommandLineW()));
      }

    }

  }

}

@ SteveL-MSFT

рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рд╡рд╣ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдмрд╛рдж рдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ ProcessStartInfo.ArgumentList (_verbatim_ рдХреЗ рддрд░реНрдХ рдХрд╛ рдПрдХ _collection_ рдпреВрдирд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж MS C / C ++ - рдХрдиреНрд╡реЗрдВрд╢рди-рдХрдВрдкреНрд▓рд╛рдВрдЯ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдПрдВ:

  • рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рд╕реЗ, рдПрдХ рдмрд╛рд░ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП, _ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд░рд┐рдпрд╛рдпрддреЗрдВ рджреЗрддрд╛ рд╣реИред

  • @JamesWTherher рдХрд╛ рдкреАрдЖрд░ рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЦрд╛рд▓реА рддрд░реНрдХ рдЕрднреА рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ ред

    • рдПрдХ рдмрд╛рд░ рдЬреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рдХреНрд╕ _Unix_ рдкрд░ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди CLIs рдХреЗ рд▓рд┐рдП _Windows_ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд╡рд╛рд╕ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред

рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдЬреНрдЮрд╛рдд рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрднреА рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдЖрдкрд╕реЗ рдЖрдЧреНрд░рд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрдВрдж рди рдХрд░реЗрдВ ред

_Allowlist_ (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг) рдХреЗ рдмрдЬрд╛рдп, рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдЗрд╕ рд╕реНрдерд╛рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , @TSlivede рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рдКрдкрд░ рд╕реЗ рдкрд░рд┐рд╖реНрдХреГрддред

рдпреЗ рдЖрд╡рд╛рд╕, рдЬреЛ рдХреЗрд╡рд▓ Windows рдкрд░ _needed рд╣реИрдВ:

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпреЗ рд╣реИрдВ:

  • рдпреВрдирд┐рдХреНрд╕ рдХреА рддрд░рд╣, ProcessStartInfo.ArgumentList рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ _one рдпрд╛ both_ рдорд┐рд▓рддреЗ рд╣реИрдВ, _ рдХреМрди рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ ProcessStartInfo.Arguments рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ) рд╡рд░реНрддрдорд╛рди рдореЗрдВ):

    • рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ ( .cmd , .bat ) рдпрд╛ cmd.exe рд╕реАрдзреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
    • рдЙрд╕ рдШрдЯрдирд╛ рдореЗрдВ, _embedded_ " "" ( \" рдмрдЬрд╛рдп) рдХреЗ рд░реВрдк рдореЗрдВ рдмрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрддрд░рд┐рдХреНрд╖-рдХрдо рддрд░реНрдХ рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд cmd.exe рдореЗрдЯрд╛рдЪреИрдЯрд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдбрдмрд▓-рдЙрджреНрдзреГрдд (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рддрд░реНрдХ _ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди_ рдбрдмрд▓-рдЙрджреНрдзреГрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ): " & | < > ^ , ; - рдпрд╣ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд╣рд╛рдИ-рдкреНрд░реЛрдлрд╛рдЗрд▓ CLIs рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ _entry рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ points_ред
    • рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ (рдФрд░ рд╕рдВрднрд╡рддрдГ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛), рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрд░реНрдХ рдЬреЛ рд░реЗрдЧреЗрдХреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
      '^([/-]\w+[=:]|\w+=)(.*? .*)$' рдореМрдЬреВрдж рд╣реИ, рдРрд╕реА рд╕рднреА рджрд▓реАрд▓реЗрдВ _valial_ рдХреЛ рдХреЗрд╡рд▓ _value рднрд╛рдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рджреЛрд╣рд░реЗ-рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ : рдпрд╛ = рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ)

      • рдЬреИрд╕реЗ, PowerShell рд╢рдмреНрджрд╢рдГ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП msiexec.exe / msdeploy.exe рдФрд░ cmdkey.exe рддрд░реНрдХред
        FOO=bar baz рдФрд░ /foo:bar baz / -foo:bar baz рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рд░рдЦреА рдЬрд╛рдПрдЧреА:
        foo="bar baz" рдпрд╛ /foo:"bar baz" / -foo:"bar baz" _any_ CLIs рдЬрд┐рдиреНрд╣реЗрдВ рдЦреБрд╢ рдХрд░рдиреЗ рдХреА рдЗрд╕ рд╢реИрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
    • рд╢рдмреНрджрд╢рдГ \ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреЛ MS C / C ++ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрди рдЖрд╡рд╛рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ _is't_ рдХреЛ рдХреНрдпрд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • msiexec.exe (рдФрд░ рд╕рдВрднрд╡рддрдГ msdeploye.exe рднреА) _only_ "" _embedded_ " ред , рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдирд┐рдпрдо _not_ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ - рд╕рд┐рд╡рд╛рдп рдЕрдЧрд░ рдЖрдк рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдпрд╛ cmd /c рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред

    • рдпрд╣ рдХрд╛рдлреА рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ,
      msiexec.exe /i example.msi PROPERTY="Nat ""King"" Cole" ), рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рднреА рджреБрд░реНрд▓рдн рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ misexec рдЪрд╛рд▓рд╛рди рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдЕрдВрдд рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _ рд╣рд╕реНрдд рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ_ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рджреЛ рддрд░реАрдХреЗ:
    • cmd /c start /wait msiexec /i example.msi PROPERTY='Nat "King' Cole' - cmd.exe (рддрдм) рдХреЙрд▓ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП "" -рд╕рд░реНрдЬрд┐рдВрдЧ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛
    • Start-Process -Wait msiexec '/i example.msi PROPERTY="Nat ""King"" Cole"' - -ArgumentList ( -Args ) рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╢рдмреНрджрд╢рдГ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рджреЗрдЦреЗрдВ # 5576)ред
  • рдХреЛрдИ рдЕрдиреНрдп рдЧреИрд░-рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реАрдПрд▓рдЖрдИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЖрд╡рд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ - рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВред

рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрд╢рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реЛрддрд╛ рд╣реИ: cmd /c рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, рдпрд╛, рдЧреИрд░-рдХрдВрд╕реЛрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, Start-Process рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╛ --% ; рдЕрдЧрд░ рд╣рдо ins ( Invoke-NativeShell ) cmdlet рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ; dbea ( Debug-ExecutableArguments cmdlet echoArgs.exe -рд╕рдорд╛рди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдВрдЧ рдкрд░ рднреА, _diagnose_ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднреА рдорджрдж рдХрд░реЗрдЧрд╛ред


рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдмрдирд╛рдо рдСрдкреНрдЯ-рдЗрди рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рд▓рд┐рдП:

  • рдХреНрдпрд╛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд░реБрдЪрд┐ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИ рдХрд┐ рдпрд╣ _default_ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрди рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ (nontrivial) рдмреНрд░реЗрдХрд┐рдВрдЧ рд░рд╛рд╢рд┐ рдореЗрдВ рд░рд╛рд╢рд┐ рд╣реЛрдЧреА?

  • рдХреНрдпрд╛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП?

    • рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ _unwitting_ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ _all_ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rkeithhill picture rkeithhill  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pcgeek86 picture pcgeek86  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aragula12 picture aragula12  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ajensenwaud picture ajensenwaud  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

abock picture abock  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ