您必须在“/”操作的右侧提供一个值表达式
问题描述:
Dependencies\iis7psprov_x86.msi /qn /l* $SnapinInstallLog
但这并不
$SnapinInstaller = "Dependencies\iis7psprov_x86.msi"
$SnapinInstaller /qn /l* $SnapinInstallLog
我得到以下错误: 你必须提供在“/”操作者的右手侧的值表达式。 + $ SnapinInstaller/Q < < < < N/L * $ SnapinInstallLog
我要如何管理单元安装与变量$ SnapinInstaller?
答
PowerShell可识别$SnapinInstaller
作为变量,并评估它 - 为一个字符串。如果你想PowerShell来“呼吁”由变量命名的命令,那么使用呼叫运营商&
像这样:
& $SnapinInstaller /qn /l* $SnapinInstallLog
虽然可以使用Invoke-Expression
,它通常是可以避免的,尤其是利用用户提供的数据,由于脚本注入攻击possibilty例如:
PS> $SnapinInstallLog = Read-Host "Enter log file name"
Enter log file name: c:\temp\snapin.log; remove-item C:\xyzzy -r -force -whatif
PS> Invoke-Expression "$SnapinInstaller /qn /l* $SnapinInstallLog"
坏,因为用户能够注入任意脚本在这里发生。
OTOH,如果你有一个字符串(没有用户提供的输入)表示了一堆参数,Invoke-Expression
可以派上用场,在那种情况下例如为:
$psargs = "\\$computer -d -i 0 notepad.exe"
Invoke-Expression "psexec.exe $psargs"
答
这是因为PowerShell将$ SnapinInstaller像一个字符串,而不是命令。
做你想做的,我可以remeber什么的第一种方式是写
调用-表达-Command($ SnapinInstaller + “/ QN/L *” + $ SnapinInstallLog)
这适用于* .exe,我没有用* .msi进行尝试。
plussss wunnnnnn – x0n 2011-01-20 16:36:40