Powershell argumentlist 和 double+ 空格
Powershell argumentlist and double+ spaces
有人能解释一下吗?我正在 运行 执行以下 Powershell 命令,2 个 "test" 之间的双 space 被转换为单个 space。使用 PS 3.0.
Start-Process Powershell -ArgumentList "-Command Write-Host test test;pause"
Start-Process Powershell -ArgumentList "-Command Write-Host 'test test';pause"
Start-Process Powershell -ArgumentList "Write-Host 'test test';pause"
下面的脚本调用(仅包含一个 $String 参数和 Write-Host $String;pause)工作正常,但在同一会话中执行:
& C:\Test\Test.ps1 -String 'test test'
但是下面用单个 space 替换了双 space:
Start-Process Powershell -ArgumentList "& C:\Test\Test.ps1 -String 'test test'"
我需要能够在当前会话之外 运行 另一个 PS 脚本并将参数传递给可能包含像这样的双 space 的脚本。谢谢!
据我所知,发生这种情况是因为在将参数发送到 PowerShell 之前没有将双引号括起来。这将导致 shell 在 PowerShell 看到它们之前折叠 spaces(因为它解析参数)。
所以我尝试了这个测试:
Start-Process powershell.exe -ArgumentList "-NoExit -Command Write-Verbose '1 2 3 .' -Verbose"
它像你一样失败了,没有 spaces。
所以在新创建的 PowerShell window 中,我 运行 这个:
gwmi Win32_Process -Filter "ProcessId = '$([System.Diagnostics.Process]::GetCurrentProcess().Id)'" | select -ExpandProperty CommandLine
结果:
"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -Command Write-Verbose '1 2 3 .' -Verbose
看到命令周围没有双引号了吗? shell 似乎并不关心单引号,因此您命令中的每个 space 都会使 shell 认为这是一个新参数(它基本上是在 space 上拆分,因此多个连续的 space 会被折叠,除非它看到双引号字符串,该字符串被视为单个参数)。
您可以通过自己嵌入引号来修复它。
Start-Process Powershell -ArgumentList "`"Write-Host 'test test';pause`""
有人能解释一下吗?我正在 运行 执行以下 Powershell 命令,2 个 "test" 之间的双 space 被转换为单个 space。使用 PS 3.0.
Start-Process Powershell -ArgumentList "-Command Write-Host test test;pause"
Start-Process Powershell -ArgumentList "-Command Write-Host 'test test';pause"
Start-Process Powershell -ArgumentList "Write-Host 'test test';pause"
下面的脚本调用(仅包含一个 $String 参数和 Write-Host $String;pause)工作正常,但在同一会话中执行:
& C:\Test\Test.ps1 -String 'test test'
但是下面用单个 space 替换了双 space:
Start-Process Powershell -ArgumentList "& C:\Test\Test.ps1 -String 'test test'"
我需要能够在当前会话之外 运行 另一个 PS 脚本并将参数传递给可能包含像这样的双 space 的脚本。谢谢!
据我所知,发生这种情况是因为在将参数发送到 PowerShell 之前没有将双引号括起来。这将导致 shell 在 PowerShell 看到它们之前折叠 spaces(因为它解析参数)。
所以我尝试了这个测试:
Start-Process powershell.exe -ArgumentList "-NoExit -Command Write-Verbose '1 2 3 .' -Verbose"
它像你一样失败了,没有 spaces。
所以在新创建的 PowerShell window 中,我 运行 这个:
gwmi Win32_Process -Filter "ProcessId = '$([System.Diagnostics.Process]::GetCurrentProcess().Id)'" | select -ExpandProperty CommandLine
结果:
"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -Command Write-Verbose '1 2 3 .' -Verbose
看到命令周围没有双引号了吗? shell 似乎并不关心单引号,因此您命令中的每个 space 都会使 shell 认为这是一个新参数(它基本上是在 space 上拆分,因此多个连续的 space 会被折叠,除非它看到双引号字符串,该字符串被视为单个参数)。
您可以通过自己嵌入引号来修复它。
Start-Process Powershell -ArgumentList "`"Write-Host 'test test';pause`""