Powershell-Script: Gesetzten Exit-Code in Winst auswerten

Antworten
krzn-pbetschner
Beiträge: 14
Registriert: 16 Jan 2018, 08:07

Powershell-Script: Gesetzten Exit-Code in Winst auswerten

Beitrag von krzn-pbetschner »

Hallo zusammen,

ich stehe leider etwas auf dem Schlauch.

Powershell-Scripte liefern zwei Arten von Exit-Code:
- Der Exit-Code n, der durch "Exit n " zurückgegeben wird
- Der Exit-Code True/False bzw. 0/1, der den Erfolg/Mißerfolg des ausgeführten Scripts zurückgibt.

Mein unten angehängtes Script liefert mir als ps1-Datei unter der Powershell den ExitCode, den ich angebe.
Unter Winst liefert es mir 0 oder 1 (je nachdem, ob der Exit-Code des Scripts selbst 0 oder Nicht-Null ist), also ob es erfolgreich (0) oder nicht erfolgreich (>0) gelaufen ist.

Ich benötige jedoch den explizit gesetzten ExitCode.

Code: Alles auswählen

[Aktionen]
DefVar $SetupExitCode$

DosInAnIcon_setpolicy
ExecWith_powershell_2008r2 "%System%\WindowsPowerShell\v1.0\powershell.exe" winst /64Bit
set $SetupExitCode$ = getLastExitcode

	Switch $SetupExitCode$
		Case "0"
			comment "ExitCode " + $SetupExitCode$ + ": Alles gut."
		EndCase
		Case "10"
			comment "ExitCode " + $SetupExitCode$ + ": Etwas ist passiert."
		EndCase
		Case "20"
			LogWarning "ExitCode " + $SetupExitCode$ + ": Da könnte was daneben gegangen sein."
			Exit /Reboot
		EndCase
		DefaultCase
			LogWarning "PAAAAANIK."
			isFatalError
			ExitWindows /ImmediateLogout
		EndCase
	EndSwitch



[DosInAnIcon_setpolicy]
echo "powershell set-executionpolicy RemoteSigned ..."
powershell.exe set-executionpolicy RemoteSigned
exit %ERRORLEVEL%

[ExecWith_powershell_2008r2]
#############################################
# Aktuellen Maschinennamen ermitteln
#############################################
$Hostname = hostname

#############################################
# Computer umbenennen
#############################################
if ($Hostname -eq "NeuerName") {
	Exit 0
}
Else {
	$Result = (rename-computer -computername $Hostname -newname NeuerName) 2>&1 | Out-String
	if ($Result.Contains('identisch')) {
		Exit 10
	}
	ElseIf ($Result.Contains('Neustart')) {
		Exit 20
	}
	Else {
		Exit 200
	}
}

Wie komme ich an den Code heran?

Vielen Dank.

Grüße
Patrick
Mit freundlichen Grüßen
Im Auftrag

Patrick Betschner

Kommunales Rechenzentrum Niederrhein
Der Verbandsvorsteher
Abteilung 2
Systeme und Netze
Friedrich-Heinrich-Allee 130
47475 Kamp-Lintfort -Germany-
bernd670
Beiträge: 90
Registriert: 16 Mär 2018, 10:44

Re: Powershell-Script: Gesetzten Exit-Code in Winst auswerten

Beitrag von bernd670 »

Hallo,

evtl. könnte es so gehen, nicht getestet!

Code: Alles auswählen

[Aktionen]
DefVar $SetupExitCode$

DosInAnIcon_setpolicy
set $SetupExitCode$ = trim(takeString(-1, getOutStreamFromSection('ExecWith_powershell_2008r2 "%System%\WindowsPowerShell\v1.0\powershell.exe" winst /64Bit')))

   Switch $SetupExitCode$
      Case "0"
         comment "ExitCode " + $SetupExitCode$ + ": Alles gut."
      EndCase
      Case "10"
         comment "ExitCode " + $SetupExitCode$ + ": Etwas ist passiert."
      EndCase
      Case "20"
         LogWarning "ExitCode " + $SetupExitCode$ + ": Da könnte was daneben gegangen sein."
         Exit /Reboot
      EndCase
      DefaultCase
         LogWarning "PAAAAANIK."
         isFatalError
         ExitWindows /ImmediateLogout
      EndCase
   EndSwitch



[DosInAnIcon_setpolicy]
echo "powershell set-executionpolicy RemoteSigned ..."
powershell.exe set-executionpolicy RemoteSigned
exit %ERRORLEVEL%

[ExecWith_powershell_2008r2]
#############################################
# Aktuellen Maschinennamen ermitteln
#############################################
$Hostname = hostname

#############################################
# Computer umbenennen
#############################################
if ($Hostname -eq "NeuerName") {
   Exit 0
}
Else {
   $Result = (rename-computer -computername $Hostname -newname NeuerName) 2>&1 | Out-String
   if ($Result.Contains('identisch')) {
      Write-Host 10
      Exit 10
   }
   ElseIf ($Result.Contains('Neustart')) {
      Write-Host 20
      Exit 20
   }
   Else {
      Write-Host 200
      Exit 200
   }
}
MfG
Bernd
Antworten