netzwerkdude
Goto Top

PowerShell - Invoke-Command - SkriptBlock

Moin,

ich würde gerne auf einem Remotesystem prüfen ob ein Server einenen Neustart wegen eines Win Updates benötigt - das Internet sagte eins der unten stehenden Reg Keys würde es einem verrraten.
Jetzt will ich das per Skript abfragen

leider wird in dieser function niemals der true fall ausgeführt:

function UpdateChecker($computers){
    foreach ($x in $computers){
        If(Invoke-Command -ComputerName $x -ScriptBlock {Test-Path "HKLM:\SOFTWARE­\Microsoft­\Windows­\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"}) {  
                $ServerRestartListe += $x
        }
        else {
        Write-Host "if traf nicht zu" -ForegroundColor Green  
        }
$ServerRestartListe
    }
}

Während nur:
Invoke-Command -ComputerName TEST2012 -ScriptBlock {Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"}  
zu einem true führt

Hinweis: $computers ist ein Array mit einem Eintrag: TEST2012

Kann mir jemand sagen wo der Fehler ist?

Content-Key: 364116

Url: https://administrator.de/contentid/364116

Printed on: May 18, 2024 at 07:05 o'clock

Mitglied: 135333
135333 Feb 08, 2018 updated at 15:33:50 (UTC)
Goto Top
$ServerRestartListe Ist kein hier ersichtlich "vorher" definiertes Array, was es aber sein muss damit sich ein Wert hinzufügen lässt.
$ServerRestartListe = @()
Und den Invoke-Command würde ich vorher in einer Variablen speichern und im if die Variable prüfen.

Gruß Snap

P.s. für das Remote prüfen eines Registry Wertes braucht es nicht unbedingt Invoke-Command das geht auch per WMI und StdRegProv.
Member: NetzwerkDude
NetzwerkDude Feb 08, 2018 at 16:01:18 (UTC)
Goto Top
Um es mal zu simplifizieren:
Write-Host "ausgabe über variable"  
$test = Invoke-Command -ComputerName TEST2012 -ScriptBlock {Test-Path "HKLM:\SOFTWARE­\Microsoft­\Windows­\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"}  
$test

Write-Host "ausgabe direkt:"  
Invoke-Command -ComputerName TEST2012 -ScriptBlock {Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"}  

Ausgabe:
ausgabe über variable
False
ausgabe direkt:
True

vielleicht sitze ich schon zu lange vorm bildschirm... aber wo ist da der unterschied?
Member: NetzwerkDude
NetzwerkDude Feb 08, 2018 at 16:21:28 (UTC)
Goto Top
ach so was... war igend ein copy & paste fuckup - habe alle keys mal neu getippt/kopiert, jetzt gehts
Mitglied: 135333
135333 Feb 08, 2018 at 22:35:22 (UTC)
Goto Top
Hätte mich auch schwer gewundert.