Invoke-Expression Not Running命令

时间:2014-10-30 14:49:21

标签: powershell invoke-command

我正在提取以前创建的文本文件,该文件只列出了所有当前安装的Windows更新的KB编号。我正在尝试将此文件拉入并调用wusa.exe并将其传递给KB编号以执行卸载。

$a = Get-Content c:\hotfixid.txt
foreach ($kb in $a) {
    $command = 'cmd /c wusa.exe /uninstall /kb:' + $kb.Trim().Substring(2) + ' /quiet /norestart'
    #Write-Host $command
    Write-Host "Currently uninstalling $kb"
    Invoke-Expression -Command:$command
}

如果我使用

Write-Host $command

并将其直接复制到Windows中的运行对话框,它成功完成。

在PowerShell脚本中运行它时会发生的事情是它只在大约2秒内一个接一个地输出Write-Host部分。我没有看到任何命令窗口打开,我看不到它实际上做了什么。我使用不受限制的执行策略运行PowerShell脚本“作为管理员”。我还尝试在$command添加'runas',每次都使用管理权限调用CMD窗口,但没有任何区别。通过Invoke-Command调用它也没有任何区别。

1 个答案:

答案 0 :(得分:2)

PowerShell可以直接运行大多数命令而不会有太多麻烦。

使用Invoke-Expression只会使问题复杂化,Invoke-CommandStart-Process也是如此,因为您需要正确引用,并以稍微不自然的方式传递参数。

您甚至可以在大多数情况下跳过cmd.exe

尝试以下方法:

wusa.exe /uninstall "/kb:$($kb.Trim().Substring(2))" /quiet /norestart