Start-Transcript c:\scripts\InstallUpdates.log -Append # -NoClobber
$SourceMSUFiles = (get-content install-list.txt | where {$_ -like "*.msu"})
#Install MSU files
foreach($file in $SourceMSUFiles)
{
$Argument= "$Files",' /quiet',' /norestart'
& start wusa -ArgumentList @Argument -Wait # -RedirectStandardOutput "c:\scripts\InstallUpdates.log"
Write-Host "Installing $file" `n
}
stop-transcript
在正常的 cmd 行中它将像这样工作:
wusa $files /quiet /norestart
我想使用 Powershell 来做我通常用命令行做的事情。
答案1
实际上,您可以使用相同的命令。或者您正在寻找更惯用的东西?我认为使用 CMD 语法启动可执行文件更容易,除非您看到一些奇怪的错误(吻)甚至重定向也能起作用:
Get-Content install-list.txt | Where-Object {$_ -like "*.msu} | Foreach-Object {
wusa $_ /quiet /norestart >> "c:\script\installupdates.log" | Wait-Process
}
当我尝试对虚假更新执行此操作时,日志文件为空。我认为这可能与安静选项有关。命令行中似乎也很安静!
答案2
在 powershell 中,你可以像在 CMD 中一样调用它。无需使用Start-Process
。
答案3
约翰斯的回答解决了这个问题。
最终代码
Get-Content install-list.txt | Where-Object {$_ -like "*.msu"} | Foreach-Object {
wusa $_ /quiet /norestart >> "c:\script\installupdates.log" | Wait-Process
}
Write-Host "Installed patches on"
((get-date -DisplayHint Date))
get-hotfix|where {$_.InstalledOn -gt ((get-Date).AddDays(-1))}|Select HotfixId