我需要在远程计算机上运行ps1脚本.该脚本将传递一个表示文件名的参数.我已经尝试了很多很多不同的组合和方法来将参数传递给脚本块,但是在尝试支持脚本名称和/或文件名中的空格时,我总是遇到一个或另一个错误.
注意:最终结果将使用Invoke-Command参数在REMOTE计算机上运行脚本,但为了简单起见,测试所有示例都在本地运行.-ComputerName
给出样本"远程"脚本
#processFile.ps1
$args[0] # Just outputs the first parameter passed
Run Code Online (Sandbox Code Playgroud)
当名称中没有空格时,以下工作
$cmd = ".\processFile.ps1"
$fn = "someFile.csv"
$sb = [ScriptBlock]::Create("$cmd $fn")
Invoke-Command -ScriptBlock $sb
# Outputs the correct
someFile.csv
Run Code Online (Sandbox Code Playgroud)
但是,以下不起作用
$cmd = ".\processFile.ps1"
$fn = "some File.csv"
$sb = [ScriptBlock]::Create("$cmd $fn")
Invoke-Command -ScriptBlock $sb
# Outputs the incorrect
some
Run Code Online (Sandbox Code Playgroud)
显然,文件名参数需要进行转义并作为"some File.csv"传递.这可以通过以下方式完成:
$cmd = ".\processFile.ps1"
$fn = "some File.csv"
$sb = [ScriptBlock]::Create("$cmd `"$fn`"") # Notice the escape $fn parameter
Invoke-Command -ScriptBlock $sb
# Outputs the correct
some File.csv
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将此空间支持扩展到脚本名称时,一切都崩溃了.以下失败
$cmd = ".\processFile.ps1"
$fn = "some File.csv"
$sb = [ScriptBlock]::Create("`"$cmd`" `"$fn`"") # Notice the attempt to escape both parameters
Run Code Online (Sandbox Code Playgroud)
有以下例外
Exception calling "Create" with "1" argument(s): "Unexpected token 'some File.csv' in expression or statement."
Run Code Online (Sandbox Code Playgroud)
我尝试过的所有东西,以及许多不同的方法,都产生了类似的东西.我似乎无法让两个参数都被转义.(实际上,问题不仅仅是我无法逃避第一个参数.我的一些尝试包括嵌套引号,单引号,[ScriptBlock] :: Create,{},$ executionContext等.
| 归档时间: |
|
| 查看次数: |
8500 次 |
| 最近记录: |