[gelöst, nicht schön, aber gelöst] ExecWith Powershell ExitCode immer 1 statt CustomValue

fredfanatics
Beiträge: 39
Registriert: 10 Nov 2016, 09:33

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Beitrag 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]
Zuletzt geändert von fredfanatics am 05 Feb 2019, 14:07, insgesamt 1-mal geändert.
fredfanatics
Beiträge: 39
Registriert: 10 Nov 2016, 09:33

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Beitrag 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.
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Beitrag 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:

Code: Alles auswählen

import OPSI
fredfanatics
Beiträge: 39
Registriert: 10 Nov 2016, 09:33

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Beitrag von fredfanatics »

Powershell ist sowieso ein Krampf...Hauptsache alles anders, als in anderen Programmiersprachen... :evil:
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Beitrag 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

Code: Alles auswählen

import OPSI
fredfanatics
Beiträge: 39
Registriert: 10 Nov 2016, 09:33

Re: ExecWith Powershell ExitCode immer 1 statt CustomValue

Beitrag 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...
Antworten