ato*_*son 5 string powershell arguments powershell-3.0
有人可以解释吗?我正在运行以下Powershell命令,两个“测试”之间的双倍空格将转换为一个空格。使用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"
Run Code Online (Sandbox Code Playgroud)
下面的脚本调用(仅包含$ String参数和Write-Host $ String; pause)可以正常工作,但在同一会话中执行:
& C:\Test\Test.ps1 -String 'test test'
Run Code Online (Sandbox Code Playgroud)
但是下面用单个空格代替了双精度空格:
Start-Process Powershell -ArgumentList "& C:\Test\Test.ps1 -String 'test test'"
Run Code Online (Sandbox Code Playgroud)
我需要能够在当前会话之外运行另一个PS脚本,并将参数传递给可能包含此类双精度空格的脚本。谢谢!
据我所知,这是因为在发送到 PowerShell 之前没有在参数周围加上双引号。这将导致 shell 在 PowerShell 看到它们之前折叠空格(因为它解析参数)。
所以我尝试了这个测试:
Start-Process powershell.exe -ArgumentList "-NoExit -Command Write-Verbose '1 2 3 .' -Verbose"
Run Code Online (Sandbox Code Playgroud)
它像你一样失败了,没有空格。
所以在新创建的 PowerShell 窗口中,我运行了这个:
gwmi Win32_Process -Filter "ProcessId = '$([System.Diagnostics.Process]::GetCurrentProcess().Id)'" | select -ExpandProperty CommandLine
Run Code Online (Sandbox Code Playgroud)
结果:
"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -Command Write-Verbose '1 2 3 .' -Verbose
Run Code Online (Sandbox Code Playgroud)
看看命令周围没有双引号?shell 似乎并不关心单引号,所以你的命令中的每个空格都让 shell 认为它是一个新参数(它基本上是在空格上拆分,所以多个连续的空格会被折叠,除非它看到一个双引号字符串,这被视为单个参数)。
您可以通过自己嵌入引号来修复它。
Start-Process Powershell -ArgumentList "`"Write-Host 'test test';pause`""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2187 次 |
| 最近记录: |