您必须在'/'运算符的右侧提供值表达式

bur*_*1ce 5 powershell

这有效

Dependencies\iis7psprov_x86.msi /qn /l* $SnapinInstallLog
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

$SnapinInstaller = "Dependencies\iis7psprov_x86.msi"
$SnapinInstaller /qn /l* $SnapinInstallLog
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:您必须在'/'运算符的右侧提供值表达式.+ $ SnapinInstaller/q <<<< n/l*$ SnapinInstallLog

如何使用变量$ SnapinInstaller安装管理单元?

Kei*_*ill 10

PowerShell将其识别$SnapinInstaller为变量并将其评估为字符串.如果您希望PowerShell"调用"变量命名的命令,那么您可以使用调用运算符,&如下所示:

& $SnapinInstaller /qn /l* $SnapinInstallLog
Run Code Online (Sandbox Code Playgroud)

虽然您可以使用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"
Run Code Online (Sandbox Code Playgroud)

这里发生了恶劣,因为用户能够注入任意脚本.

OTOH如果你有一个用单个字符串表示的束参数(并且没有用户提供的输入),Invoke-Expression可以在那个场景中派上用场,例如:

$psargs = "\\$computer -d -i 0 notepad.exe"
Invoke-Expression "psexec.exe $psargs"
Run Code Online (Sandbox Code Playgroud)