Powershell在命令中使用读取主机变量
我有一个非常简单的.ps1脚本:Powershell在命令中使用读取主机变量,powershell,parameter-passing,Powershell,Parameter Passing,我有一个非常简单的.ps1脚本: $prename = Read-Host 'What is your prename?' $lastname = Read-Host 'What is your lastname?' .\migration.exe -name=$prename -password=$lastname 无论用户输入什么,$prename和$lastname都不会传递到migration.exe-它们是空的 我做错了什么?您正在传递对象$prename和$lastname。您需要
$prename = Read-Host 'What is your prename?'
$lastname = Read-Host 'What is your lastname?'
.\migration.exe -name=$prename -password=$lastname
无论用户输入什么,$prename和$lastname都不会传递到migration.exe-它们是空的
我做错了什么?您正在传递对象$prename和$lastname。您需要展开变量,以便在变量中传递值
.\migration.exe -name=$($prename) -password=$($lastname)
$prename和$lastname未传递到migration.exe-它们是空的
这些变量引用不是空的从PowerShell 7.1开始,它们意外地没有扩展(插入);也就是说,外部程序\migration
意外地逐字接收以下参数:-name=$prename
和-password=$lastname
这应视为一个bug-请参阅
解决方法是使用显式(“…”
):
注意:在Windows上,不保证部分报价按原样传递到目标程序;相反,PowerShell首先执行自己的解析,然后根据结果参数是否包含空格,在后台按需执行(”
)重新引用。例如,如果$prename
的值为foo
,逐字
-name=foo
传递给migration.exe
;如果值为foo bar
,逐字
“-name=foo bar”
被传递-目标程序可能会正确处理,也可能不会正确处理;如果不能正确处理,则必须使用-%
,-see.OP的命令应按原样工作,并且不应将其视为错误。$(…)
,既不需要,也不会产生影响。虽然它在这里出人意料地产生了影响,但它不是一个可行的解决办法——它也会出现故障,尽管不同。
.\migration.exe -name="$prename" -password="$lastname"