这有效
Dependencies\iis7psprov_x86.msi /qn /l* $SnapinInstallLog
但这不是
$SnapinInstaller = "Dependencies\iis7psprov_x86.msi"
$SnapinInstaller /qn /l* $SnapinInstallLog
我收到以下错误: 您必须在'/'运算符的右侧提供值表达式。 + $ SnapinInstaller / q<<<< n / l * $ SnapinInstallLog
如何使用变量$ SnapinInstaller安装管理单元?
答案 0 :(得分:9)
PowerShell将$SnapinInstaller
识别为变量并对其进行评估 - 为字符串。如果您希望PowerShell“调用”变量命名的命令,那么您可以使用调用运算符&
,如下所示:
& $SnapinInstaller /qn /l* $SnapinInstallLog
虽然您可以使用Invoke-Expression
,但由于脚本注入攻击的可能性,通常会避免使用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"
,尤其是在用户提供的数据时,例如:
Invoke-Expression
这里发生了恶劣,因为用户能够注入任意脚本。
OTOH如果你有一个用单个字符串表示的束参数(并且没有用户提供输入),$psargs = "\\$computer -d -i 0 notepad.exe"
Invoke-Expression "psexec.exe $psargs"
在这种情况下可以派上用场,例如:
{{1}}
答案 1 :(得分:0)
那是因为powershell将$ SnapinInstaller视为字符串,而不是命令。
做你想做的第一种方法我记得是写
Invoke-Expression -Command($ SnapinInstaller +“/ qn / l *”+ $ SnapinInstallLog)
这适用于* .exe,我没有尝试使用* .msi。