Benutzer mit den meisten Antworten
PSSesssion

Frage
-
Hallo zusammen,
hab eine kurze Frage an euch Powershell-Profis:
hab mir ein Script gebastelt, wo man auf Win10 Maschinen remote Programme auslesen/deinstallieren kann.
$PC = Read-Host -Prompt "Bitte PC-Namen eingeben"
$Session = New-PSSession $PCInvoke-Command -Session $Session -scriptblock {
$SW = Read-Host -Prompt "Bitte Software eingeben"
Get-Package *$SW*IF ($Errorlevel -eq "1")
{
echo Keine installiert
exit
}
else
{
echo Installiert
}
}jedoch funktioniert das mit dem Errorlevel nicht. Was mache ich falsch? das Script wird natürlich noch erweitert
Antworten
-
$LASTEXITCODE beinhaltet nur die Exit Codes für Win32 Applikationen nicht für Powershell Cmdlets.
Alternative dazu z. B. mit Try Catch arbeiten:
try { Get-Package "$SW" } catch { Write-Output "Nicht installiert" }
oder aber auch per If Abfrage:
$Package = Get-Package "$SW" -ErrorAction SilentlyContinue If ($Package -ne $null) { Write-Output "Installiert" } Else { Write-Output "Nicht installiert" }
Als zusätzliche Anmerkung, der Name Parameter von Get-Package nimmt keine Wildcards an, sondern setzt automatisch die Wildcards. Daher
Get-Package "*$SW*"
in
Get-Package "$SW"
ändern. Siehe https://docs.microsoft.com/de-de/powershell/module/PackageManagement/Get-Package?view=powershell-5.0#name
Gruß Olaf
- Bearbeitet Olaf Reitz Freitag, 11. August 2017 07:50
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 21. August 2017 11:12
Alle Antworten
-
Moin,
ich würde jetzt erst mal vorsichtig sagen, dass es nicht $Errorlevel, sondern $LASTEXITCODE heißt.
Ansonsten kann Invoke-Command natürlich auch direkt mit -ComputerName aufgerufen werden, ohne vorher explizit eine PSSession aufzubauen.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
$LASTEXITCODE beinhaltet nur die Exit Codes für Win32 Applikationen nicht für Powershell Cmdlets.
Alternative dazu z. B. mit Try Catch arbeiten:
try { Get-Package "$SW" } catch { Write-Output "Nicht installiert" }
oder aber auch per If Abfrage:
$Package = Get-Package "$SW" -ErrorAction SilentlyContinue If ($Package -ne $null) { Write-Output "Installiert" } Else { Write-Output "Nicht installiert" }
Als zusätzliche Anmerkung, der Name Parameter von Get-Package nimmt keine Wildcards an, sondern setzt automatisch die Wildcards. Daher
Get-Package "*$SW*"
in
Get-Package "$SW"
ändern. Siehe https://docs.microsoft.com/de-de/powershell/module/PackageManagement/Get-Package?view=powershell-5.0#name
Gruß Olaf
- Bearbeitet Olaf Reitz Freitag, 11. August 2017 07:50
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 21. August 2017 11:12