Windows Updates remote per Powershell abfragen und installieren
Ich bin etwas am verzweifeln. ich versuche nun schon seit einiger zeit ein Powershell Script zu erstellen, Womit ich von einem Server aus, auf allen anderen Servern, die ich im Script definiere, die ausstehenden Windows Updates anzeigen, installieren lassen und ggf. einen Serverreboot auslösen kann.
Die einzelnen Komponenmten funktionieren eigentlich schon.
- Das Auslesen ausstehedner Updates lokal funktioniert
- Das erkennen des ausstehenden Reboots funktioniert
- Der Reboot eines Remoteservers funktioniert.
Es hapert nun aber daran, dass ich die Ausstehenden Updates bei einem Remoteserver nicht abfragen kann. Ich bekomme immer ein Access denied. Ich habe schon etliche Ansätze versucht, die ich in diversen Foren gefunden habe, aber keiner führte bisher zum Ziel. Aktuell probiere ich es mit:
Als Ausgabe beokomme ich:
Das Ergebnis mit den 3 Updates ist dann vom lokalen Server abgegriffen. Keine Ahnung, warum. der Remote Server hat nämlich lediglich 1 Update ausstehend.
Wie bekomme ich es hin, dass ich dem Befehl "CreateInstance" die vorher definierten Credentials mitgeben kann? Ich denke, daran scheitert das Ganze nämlich.
PS: Alle Server haben keine Internetverbindung! Es geht wirklich rein darum zu prüfen, welcher Server noch ausstehende Updates zu Installation hat und wer einen Neustart benötigt.
Die einzelnen Komponenmten funktionieren eigentlich schon.
- Das Auslesen ausstehedner Updates lokal funktioniert
- Das erkennen des ausstehenden Reboots funktioniert
- Der Reboot eines Remoteservers funktioniert.
Es hapert nun aber daran, dass ich die Ausstehenden Updates bei einem Remoteserver nicht abfragen kann. Ich bekomme immer ein Access denied. Ich habe schon etliche Ansätze versucht, die ich in diversen Foren gefunden habe, aber keiner führte bisher zum Ziel. Aktuell probiere ich es mit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$adminUsername='<domain\admin-user>'
$plaintextPassword='<admin-user-password>'
$encryptedPassword=ConvertTo-securestring $plaintextPassword -AsPlainText -Force
$adminCredential=New-Object -TypeName System.Management.Automation.PSCredential -Args $adminUsername,$encryptedPassword
$Computername = '<server-ip>'
$updatesession = [activator]::CreateInstance([type]::GetTypeFromProgID("Microsoft.Update.Session",$Computername))
$UpdateSearcher = $updatesession.CreateUpdateSearcher()
$searchresult = $updatesearcher.Search("IsInstalled=0") # 0 = NotInstalled | 1 = Installed
$searchresult.Updates.Count
$Updates = If ($searchresult.Updates.Count -gt 0) {
#Updates are waiting to be installed
$count = $searchresult.Updates.Count
Write-Verbose "Found $Count update\s!"
#Cache the count to make the For loop run faster
For ($i=0; $i -lt $Count; $i++) {
#Create object holding update
$Update = $searchresult.Updates.Item($i)
[pscustomobject]@{
Title = $Update.Title
KB = $($Update.KBArticleIDs)
SecurityBulletin = $($Update.SecurityBulletinIDs)
MsrcSeverity = $Update.MsrcSeverity
IsDownloaded = $Update.IsDownloaded
Url = $Update.MoreInfoUrls
Categories = ($Update.Categories | Select-Object -ExpandProperty Name)
BundledUpdates = @($Update.BundledUpdates)|ForEach{
[pscustomobject]@{
Title = $_.Title
DownloadUrl = @($_.DownloadContents).DownloadUrl
}
}
}
}
}
$updates |ft kb,title,msrcseverity,url -autosize
Als Ausgabe beokomme ich:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Exception calling "CreateInstance" with "1" argument(s): "Retrieving the COM class factory for remote component with CLSID {4CB43D7F-7EEE-4906-8698-60DA1C38F2FE} from machine <server-ip>
failed due to the following error: 80070005 <server-ip>."
At line:2 char:1
+ $updatesession = [activator]::CreateInstance([type]::GetTypeFromProgI ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) , MethodInvocationException
+ FullyQualifiedErrorId : UnauthorizedAccessException
3
KB Title MsrcSeverity Url
-- ----- ------------ ---
4598243 2021-01 Cumulative Update for Windows Server 2016 for x64-based Systems (KB4598243) Critical System.__ComObject
4535680 Security Update for Windows Server 2016 for x64-based Systems (KB4535680) Important System.__ComObject
2267602 Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.329.2219.0) System.__ComObject
Das Ergebnis mit den 3 Updates ist dann vom lokalen Server abgegriffen. Keine Ahnung, warum. der Remote Server hat nämlich lediglich 1 Update ausstehend.
Wie bekomme ich es hin, dass ich dem Befehl "CreateInstance" die vorher definierten Credentials mitgeben kann? Ich denke, daran scheitert das Ganze nämlich.
PS: Alle Server haben keine Internetverbindung! Es geht wirklich rein darum zu prüfen, welcher Server noch ausstehende Updates zu Installation hat und wer einen Neustart benötigt.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 640959
Url: https://administrator.de/forum/windows-updates-remote-per-powershell-abfragen-und-installieren-640959.html
Ausgedruckt am: 05.04.2025 um 15:04 Uhr
2 Kommentare
Neuester Kommentar