我有一项任务要求我删除特定日期的所有windowsupdatepackages。 我使用给定的KB编号一次制作一个脚本来删除一个包。我现在被困住了,不知道做了什么,这是我的代码:
function Uninstall-Hotfix {
[cmdletbinding()]
param(
$computerName = $env:computername,
[string] $hotFixId
)
$hotFixes = Get-WmiObject -ComputerName $computerName -Class Win32_QuickFixEngineering | select hotfixid
$date = Get-Date
Write-Host "deleted on '$date'"
if ($hotFixes -match $hotFixId) {
$hotFixId = $hotFixId.Replace("KB", "")
Write-Host "found hotfix" + $hotFixId
Write-Host "Uninstalling the hotflix"
$uninstallString = "cmd.exe /c wusa.exe /uninstall /KB:$hotFixId /quiet /norestart"
([WMICLASS]"\\$computerName\ROOT\CIMV2:win32_process").Create($uninstallString) | out-null
while (@(Get-Process wusa -ComputerName $computerName -ErrorAction SilentlyContinue).Count -ne 0) {
Start-Sleep 3
Write-Host "Waiting for update removal to finish ..."
}
Write-Host "Completed uninstalling of $hotFixId"
}
else {
Write-Host "Given hotfix($hotFixId) not found"
return
}
}
答案 0 :(得分:0)
不使用hotfixId字符串作为参数,而是使用日期对象作为输入参数。然后让函数将提供给函数的日期与$ hotfix的日期进行比较。 Win32_QuickFixEngineering类具有可用于此比较的InstalledOn属性。如果日期匹配,则卸载此修补程序。关于如何做到这一点的确切细节是你的功课,但如果你遇到一个特定的问题就会问另一个问题。
请参阅Win32_QuickFixEngineering类的文档:
https://msdn.microsoft.com/en-us/library/aa394391(v=vs.85).aspx