Jump to content

PS: MS Updates Reportin -> Invoke-Command


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich bin gerade dabei mir einen Update-Report aller unserer WIndows Server zusammenzubauen.

 

Die Spalten sollen am Ende wir folgt ausgefüllt werden:

Servername;Datum der letzten Installation;Neustart nötig;Betriebssystem

 

Für die Update-Infos verwende ich das PS-Modul "PSWIndowsUpdate".

Da diese ja noch nciht auf jedem Server ist, muss ich es vorher noch verteilen und importieren. Das funktioniert auch.

 

Leider bekomme ich die Infos aus der Remote-Abfrage nicht weiterverarbeitet.

 

BIs jetzt habe ich folgendes

cls



$servers = @("test-server2")



foreach($server in $servers) {

#Check ob das Modul auf dem Server installiert ist. Ansonsten wird es kopiert

IF(!(Test-Path "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\*")) {copy-item "\\testserver1\D$\PSWindowsUpdate" -Recurse "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules"}


Invoke-Command -ComputerName $server -ScriptBlock {Import-Module PSWindowsUpdate}

Invoke-Command -ComputerName $server -ScriptBlock {$wuabfrage = Get-WUHistory | Select-Object -first 1}

#Check, ob ein Reboot nötig ist

Invoke-Command -ComputerName $server -ScriptBlock {$reboot = Get-WURebootStatus}

#Entfernung von "localhos: " aus der Varaible

$reboot = $reboot -replace "localhost: ", ""



#Abfrage des Betriebssystems

$serverinfos = Get-ADComputer $server -Properties * | Select operatingsystem



#Output

"$($wuabfrage.ComputerName);$($wuabfrage.Date);$reboot;$($serverinfos.operatingsystem))"

}

Ich hoffe ihr könnt mir weiter helfen.

 

Vielen Dank schon einmal

bearbeitet von Kuddel071089
Link zu diesem Kommentar

Danke für den Tip. Habe es jetzt umgestellt.

cls

$servers = @("testserver2")



foreach($server in $servers) {
#Check ob das Modul auf dem Server installiert ist. Ansonsten wird es kopiert
IF(!(Test-Path "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\*")) {copy-item "\\testserver1\D$\PSWindowsUpdate" -Recurse "\\$server\C$\Windows\System32\WindowsPowerShell\v1.0\Modules"}


Invoke-Command -ComputerName $server -ScriptBlock {Import-Module PSWindowsUpdate}
 
#Invoke-Command -ComputerName $server -ScriptBlock {$wuabfrage = Get-WUHistory | Select-Object -first 1}
$wuabfrage = Invoke-Command -ComputerName $server -ScriptBlock {Get-WUHistory | Select-Object -first 1}


#Check, ob ein Reboot nötig ist
$reboot = Invoke-Command -ComputerName $server -ScriptBlock {Get-WURebootStatus}
#Entfernung von "localhost: " aus der Varaible
$reboot = $reboot -replace "localhost: ", ""

#Abfrage des Betriebssystems
$serverinfos = Get-ADComputer $server -Properties * | Select operatingsystem

#Output
"|$($wuabfrage.ComputerName)|$($wuabfrage.Date)|$reboot|$($serverinfos.operatingsystem))|"
}

Leider bekomme ich jetzt beim Befehl "Get-WURebootStatus" einen Fehler

 

Eine Instanz der COM-Komponente mit der CLSID {C01B9BA0-BEA7-41BA-B604-D0A36F469133} konnte aufgrund des folgenden Fehlers nicht von der IClassFactory erstellt werden:
80070005 Zugriff verweigert (Ausnahme von HRESULT: 0x80070005 (E_ACCESSDENIED)).
    + CategoryInfo          : NotSpecified: ( :) [New-Object], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.NewObjectCommand
    + PSComputerName        : testserver2
bearbeitet von Kuddel071089
Link zu diesem Kommentar
  • 4 Wochen später...

Ich habe die Abfrage jetzt übrigens hinbekommen.

 

Für alle AD Server bekomme ich alle Infos super ausgelesen.

 

Leider haben wir auch noch Server, die nicht Mitlgied in der AD sind (historisch bedingt / Novell eDir bis 2014).

 

Wie kann ich jetzt von diesen Server die Infos abfragen ?

 

Gestartet wird das Skript auf einem AD-Mitgliedsserver mit deinem AD-Admin-Account.

 

Ich müsste also bei den anderen Servern den lokalen Administrator verwenden (hat bei allen Servern das gleiche PW).

 

Leider stehe ich gerade voll auf dem Schlauch

Link zu diesem Kommentar

Probiers mal mit dem Parameter "-Credential"  ;)

PS: Du darfst dich auch gerne in die CmdLets einlesen. Microsoft stellt für jedes CmdLet eine Dokumentation mit Parameter detailliert online.

 

Leider gibts es bei den Commandlets "Get-WUHistory" und "Get-WURebootstatus" keinen Parameter Crendential.

 

Wenn ich es per Invoke-Command machen, funktionieren meine Crendetials nicht mehr.

 

Das OS konnte ich Remote abfragen

 

$servers = @("Server1","Server2")



foreach($server in $servers) {
#Admin-Credentials
$adminuser = "$server\Administrator"
$password = "xxxxxxxxx"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $adminuser, $secstr
 
$os = Get-WmiObject -class Win32_OperatingSystem -computername $server -Credential $server\$user $pw
$os = "$($property.Caption)"
Link zu diesem Kommentar
  • 2 Wochen später...

Wenn ich es richtig sehe sind "Get-WUHistory" und "Get-WURebootstatus" keine CmdLets, sondern einfache Skripte.

 

Wie sieht der Aufruf via Invoke-Command aus? Und wie die Fehlermeldung?

 

Ich scheitere leider schon an der Remote-Anmeldung.

 

Zum test wollte ich den Befehl "Get-Host" remote ausführen.

 

Sprich:

Invoke-Command -ComputerName Test-Server -ScriptBlock {get-host} -Credential Administrator

Im Credential Popup versuche ich es dann mit:

User: Test-Server\Administrator
PW: xxxxx

Fehlermeldung:

[Test-Server] Beim Verbinden mit dem Remoteserver "Test-Server" ist folgender Fehler aufgetreten: Die Anforderung kann von WinRM nicht verarbeitet werden. Bei Verwendung der

Kerberos-Authentifizierung ist der folgende Fehler mit Fehlercode 0x80090311  aufgetreten: Es sind momentan keine Anmeldeserver zum Verarbeiten der Anmeldeanforderung

verfügbar.  

. Mögliche Ursachen:

  - Der angegebene Benutzername oder das angegebene Kennwort ist ungültig.

  - Kerberos wird verwendet, wenn keine Authentifizierungsmethode und kein Benutzername angegeben werden.

  - Kerberos akzeptiert Domänenbenutzernamen, aber keine lokale Benutzernamen.

  - Der Dienstprinzipalname (Service Principal Name, SPN) für den Remotecomputernamen und -port ist nicht vorhanden.

  - Der Clientcomputer und der Remotecomputer befinden sich in unterschiedlichen Domänen, zwischen denen keine Vertrauensbeziehung besteht.

 Wenn Sie die oben genannten Ursachen überprüft haben, probieren Sie folgende Aktionen aus:

  - Suchen Sie in der Ereignisanzeige nach Ereignissen im Zusammenhang mit der Authentifizierung.

  - Ändern Sie die Authentifizierungsmethode; fügen Sie den Zielcomputer der Konfigurationseinstellung "TrustedHosts" für WinRM hinzu, oder verwenden Sie den HTTPS-Transport.

 Beachten Sie, dass Computer in der TrustedHosts-Liste möglicherweise nicht authentifiziert sind.

  - Führen Sie den folgenden Befehl aus, um weitere Informationen zur WinRM-Konfiguration zu erhalten: "winrm help config". Weitere Informationen finden Sie im Hilfethema

"about_Remote_Troubleshooting".

    + CategoryInfo          : OpenError: (Test-Server:String) [], PSRemotingTransportException

    + FullyQualifiedErrorId : AuthenticationFailed,PSSessionStateBroken
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...