Seite 2 von 2

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Verfasst: 29 Jan 2019, 14:52
von fredfanatics
Also, mein Script sieht so aus:

Code: Alles auswählen

[Actions]
DefVar $biossetting$
DefVar $biossettingvalue$
DefVar $password$
DefVar $exitcode$

Set $biossetting$ = GetProductProperty("biossetting","WakeOnLan")
Set $biossettingvalue$ = GetProductProperty("value","Enable")


Message "changing BIOS settings...."

DosInAnIcon_set_policy

ExecWith_powershell "%SYSTEM%\WindowsPowerShell\v1.0\powershell.exe" winst /sysnative
Set $exitcode$ = getlastexitcode
LogError $exitcode$
if ($exitcode$ = "540")
    sub "%SCRIPTPATH%\t540.opsiscript"
endif
if ($exitcode$ = "560")
    sub "%SCRIPTPATH%\t560.opsiscript"
endif

[ExecWith_powershell]
$system = Get-WMIObject Win32_Computersystem SystemFamily | Select-Object SystemFamily
if ($system.SystemFamily -eq "ThinkPad T540p"){
    exit 540
}
if ($system.SystemFamily -eq "ThinkPad T560"){
    exit 560
}


[DosInAnIcon_set_policy]
echo "powershell set-executionpolicy RemoteSigned ..."
powershell.exe set-executionpolicy RemoteSigned
exit %ERRORLEVEL%
Wenn ich den Code aus ExecWith als ps1-Datei auf dem Zielsystem ausführe, funktioniert es, wie erwartet.
Wenn ich das per opsi ausführen lasse, kommt als Exitcode 1, statt 540.

[Edit: winst /sysnative geändert]

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Verfasst: 29 Jan 2019, 16:47
von fredfanatics
Ich vermute Folgendes:

Nach dem Abarbeiten vom ExecWith wird nur $? ausgewertet und an OPSI zurückgegeben, darin steht aber nur True/False bzw. 1/0, um den richtigen Errorcode zurückzugeben müsste jedoch $lastexitcode ausgewertet werden.

Bei einem Aufruf im Dosfenster kann über %ERRORLEVEL% der $lastexitcode ausgelesen werden.

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Verfasst: 01 Feb 2019, 12:01
von n.wenselowski
fredfanatics hat geschrieben:Nach dem Abarbeiten vom ExecWith wird nur $? ausgewertet und an OPSI zurückgegeben, darin steht aber nur True/False bzw. 1/0, um den richtigen Errorcode zurückzugeben müsste jedoch $lastexitcode ausgewertet werden.

Bei einem Aufruf im Dosfenster kann über %ERRORLEVEL% der $lastexitcode ausgelesen werden.
Wieso können die Redmonder Lausbuben nicht einfach $? für den Exit Code verwenden? :roll:

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Verfasst: 01 Feb 2019, 18:53
von fredfanatics
Powershell ist sowieso ein Krampf...Hauptsache alles anders, als in anderen Programmiersprachen... :evil:

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Verfasst: 05 Feb 2019, 13:39
von n.wenselowski
Hi,

klappt vllt die Anwendung der trap aus dem opsiscript-Handbuch?
Beschrieben unter https://download.uib.de/opsi_stable/doc ... lCall_list


Gruß

Niko

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Verfasst: 05 Feb 2019, 14:05
von fredfanatics
Danke für die Antwort, ich habe festgestellt, dass ich noch ein ganz anderes Problem habe.
Seit dem Windows Funktions-Update auf 1809 fragt die Powershell bei Scripten immer nochmal extra nach, ob das Script ausgeführt werden soll, oder nicht. Das kann ich auch mit "bypass" nicht umgehen. Mit 1709 hatte ich das Problem seltsamerweise noch nicht. Ich bin jetzt gezwungen, die ps1-Datei zuerst in einer Files-Sektion auf den Rechner zu kopieren, dann mit:

Code: Alles auswählen

powershell.exe Unblock-File %OPSITMPDIR%\get_model.ps1
entsperren, und dann funktioniert

Code: Alles auswählen

[DosInAnIcon_getmodel]
powershell.exe -ep bypass -file %OPSITMPDIR%\get_model.ps1
exit %ERRORLEVEL%
Dann bekomme ich meinen Exitcode wie gewünscht und kann entsprechend verzweigen...

Für mich ist damit erstmal das Problem gelöst...