我只是希望能够将一个参数从一个PS脚本传递到另一个PS脚本,目前我的脚本(script1)如下所示(全部归功于用户CB):
$filepath = Resolve-Path "script2.ps1"
start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`""
这通过另一个PowerShell实例成功打开了另一个脚本。现在我希望能够将参数传递给'script2.ps1'脚本。我尝试了以下但是这不起作用:
script1.ps1
$name = read-host "The name"
$filepath = Resolve-Path "script2.ps1"
start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`"-name $name"
script2.ps1
Param(
[string]$name
)
write-host $name
这应该只是将script1中的$ name传递给script2中的$ name。我认为我很近但不够接近!
感谢您的帮助!
答案 0 :(得分:0)
我看到的唯一问题是您在最后一次转义"
后错过了一个空格,试试这个:
start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`" -name $name"
答案 1 :(得分:0)
是否有特定原因要在Powershell的单独实例中运行第二个脚本?如果没有,你可以直接运行脚本做得更好:
$name = read-host "The name"
.\script2.ps1 -name $name
这样您就不必担心转义任何参数。
您执行此操作的方式会强制将所有参数转换为字符串并由Windows命令行处理进行处理。这可能是一个噩梦,以确保价值以可用的形式通过。如果您直接调用脚本,则可以将 objects 作为参数传递,而Powershell则是使用对象而不是字符串。