Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell在命令中使用读取主机变量_Powershell_Parameter Passing - Fatal编程技术网

Powershell在命令中使用读取主机变量

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。您需要

我有一个非常简单的.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。您需要展开变量,以便在变量中传递值

.\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"