尋找一些幫助尋找一個簡單的方法來刪除windows更新通過PowerShell,但我相信我遇到了幾個問題。
Goals
- 根據
$data_array
中的數據檢查并卸載更新 - 暫停Windows更新,直到可以按下修補程序或更新
- 了解如何更好地工作
Issues
- 我不相信
$data
會被發送到wusa /uninstall /kb:$data /promptrestart
我認為這是因為Windows update獨立安裝程序拋出了一個沒有包號的錯誤(圖1) - 每項工作都是一次完成,而不是錯開,我的工作經驗非常有限,我不知道從哪里開始故障排除。我嘗試過使用
Get-Job | Retrieve-Job
,但似乎沒有得到太多關于狀態或返回變量的信息 - 我想命名的工作,使我更具體地知道哪些已經完成或他們在哪一步
Code Snippet
# Updates to Find
$data_array =@('KB5000802','KB5000808','KB5000822','KB5000809')
$commands = @()
# Checks Which update is installed
$commands += {
$Name = "Check Updates"
foreach($data in $data_array)
{
if(wmic qfe list brief /format:table | Select-String -Pattern $data -CaseSensitive -SimpleMatch)
{
$commands+=$data
}
}
}
# Uninstall Update
$commands += {
echo "Uninstalling Found Update of: "$data
wusa /uninstall /kb:$data /promptrestart
}
# Stops Windows Update
$commands += {
net stop wuauserv
net pause wuauserv
net stop bits
net pause bits
net stop dosvc
net pause dosvc
}
# Runs the Jobs
foreach($command in $commands){
start-job $command
}
PS輸出
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
39 Job39 BackgroundJob Running True localhost ...
41 Job41 BackgroundJob Running True localhost ...
43 Job43 BackgroundJob Running True localhost ...
Figure 1
任何幫助或指導將不勝感激,并可根據需要提供額外的信息。
Thanks!
我會通過刪除工作內容來簡化腳本。除非你真的需要在后臺運行東西,否則這只會使事情復雜化。即使在需要后臺操作時,在并行化之前先創建一個工作的線性腳本也是很有幫助的。
Further changes:
@()
,因為comma-separated列表已定義數組wmic
一次以提高性能Where-Object
語句替換第一個foreach
。echo
替換為Write-Host
,這使得未來的訪問者更容易查找文檔