Kuddel071089 9 Geschrieben 19. Juni 2017 Melden Teilen Geschrieben 19. Juni 2017 (bearbeitet) 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 19. Juni 2017 von Kuddel071089 Zitieren Link zu diesem Kommentar
Dukel 451 Geschrieben 19. Juni 2017 Melden Teilen Geschrieben 19. Juni 2017 Du musst die Daten in der Remote Abfrage zurückgeben und im Lokalen Script speichern. https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_remote Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 19. Juni 2017 Autor Melden Teilen Geschrieben 19. Juni 2017 (bearbeitet) 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 19. Juni 2017 von Kuddel071089 Zitieren Link zu diesem Kommentar
Dukel 451 Geschrieben 19. Juni 2017 Melden Teilen Geschrieben 19. Juni 2017 Bestimmte Sachen gehen mit PSWindowsUpdate nicht remote. Hierfür gibt es Invoke-WUInstall (oder so ähnlich), mit dem man ein Script remote ausführen kann (per Task Scheuler), das Ergebnis z.B. in eine Datei schreiben und später abholen kann. Zitieren Link zu diesem Kommentar
MurdocX 933 Geschrieben 19. Juni 2017 Melden Teilen Geschrieben 19. Juni 2017 Als kleinen Tipp: Nutze "-AsJob" und frage die Daten dann wieder ab. Des Weiteren kannst du alle Abfragen in ein Invoke-Command packen, um viel Zeit zu sparen ;) Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 17. Juli 2017 Autor Melden Teilen Geschrieben 17. Juli 2017 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 Zitieren Link zu diesem Kommentar
MurdocX 933 Geschrieben 17. Juli 2017 Melden Teilen Geschrieben 17. Juli 2017 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. Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 18. Juli 2017 Autor Melden Teilen Geschrieben 18. Juli 2017 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)" Zitieren Link zu diesem Kommentar
tesso 373 Geschrieben 18. Juli 2017 Melden Teilen Geschrieben 18. Juli 2017 (bearbeitet) 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? bearbeitet 18. Juli 2017 von tesso Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 2. August 2017 Autor Melden Teilen Geschrieben 2. August 2017 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 Zitieren Link zu diesem Kommentar
MurdocX 933 Geschrieben 2. August 2017 Melden Teilen Geschrieben 2. August 2017 Schon mal ausgeführt? winrm qc Update "Es sind momentan keine Anmeldeserver zum Verarbeiten der Anmeldeanforderung verfügbar." DNS-Einstellungen auf dem zu erreichenden Host richtig konfiguriert? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.