h41msh1c0r
Goto Top

Powershell Service nicht verfügbar

Servus,

Hier ein Beispiel für die Prüfung ob der Dienst installiert ist oder nicht.
$service = Get-Service -name iisadmin
 if ( ! $service ) { "IIS is not installed on this computer." }   
 else 
 { "SQL Server is " + $service.Status }  

Hier aus meinem Script
$BlsRS  = Invoke-Command -ComputerName $Serv -ScriptBlock { $Service = Get-Service -DisplayName "Service1" -ErrorAction SilentlyContinue    
                                                                         if ( ! $Service ) { "NA" }   
                                                                        }

Er stellt schon fest das der Service nicht vorhanden ist und gibt mir allerdings nix aus.

VolDFree              : 0,00
FSAUA                 : Running
TftfS                 : Running
CoreS                 : Running
BlsRS                 : >>>>  <<<<<   <--- da müsste NA , wenn der Dienst nicht installiert ist
FSWUI                 : Running

Gibt es bei Invoke-Command diesbezüglich noch etwas zu beachten?

VG

EDIT:
Oder ist es besser im Scriptblock noch ein try-catch einzubauen und dann den Fehler dort im Catch abzufangen?

EDIT2:
try{
Get-Service -DisplayName "Service1" -ErrorAction SilentlyContinue   
}
catch [System.Management.Automation.RemoteException]{
"NA"  
}

Liefert auch kein Ergebnis. ;(

Content-ID: 348762

Url: https://administrator.de/forum/powershell-service-nicht-verfuegbar-348762.html

Ausgedruckt am: 16.04.2025 um 10:04 Uhr

133883
133883 14.09.2017 aktualisiert um 13:50:46 Uhr
Goto Top
Der Try-Catch funktioniert nur wenn im Aktionsteil -ErrorAction Stop festgelegt wird denn sonst wird keine Exception getriggert und er springt nicht in den Exception Teil.

Gruß
H41mSh1C0R
H41mSh1C0R 14.09.2017 um 14:38:30 Uhr
Goto Top
hi,
bitte nicht hauen ^^.

    $Dienst= Invoke-Command -ComputerName $Server -ScriptBlock { $Service = Get-Service -DisplayName "Service1" -ErrorAction SilentlyContinue    
                                                                         if ( ! $Service ) { "NA" } }  
    if ( $Dienst -eq "NA" ) { $global:table.Rows[$selectedRow][3] = "NA"} else { $global:table.Rows[$selectedRow][3] = $($Dienst).Status}  

So bekomme ich am Ende in der DGV mein NA in die Zelle. Ist zwar denke etwas von hinten durch die Brust durchs Auge, aber das try catch innerhalb des invoke Command wollte nicht so wie es sollte.


Setze ich die ErrorAction auf Stop und setze im Catch Block einen Text bekomme ich den nicht in die Variable $Dienst.
Denke weil nur lokal nutzbar?

vg
133883
Lösung 133883 14.09.2017 um 15:24:15 Uhr
Goto Top
Zitat von @H41mSh1C0R:
Setze ich die ErrorAction auf Stop und setze im Catch Block einen Text bekomme ich den nicht in die Variable $Dienst.
Denke weil nur lokal nutzbar?
Doch return nutzen, funktioniert hier einwandfrei. Du setzt vermutlich den falschen Exception Typ lass ihn weg.