Geschweifte Klammern und ExecWith Powershell

Benutzeravatar
Der-Matze
uib-Team
Beiträge: 69
Registriert: 16 Mär 2009, 11:00

Geschweifte Klammern und ExecWith Powershell

Beitragvon Der-Matze » 27 Mai 2016, 14:08

Mir ist ein Bug bei ExecWith Powershell aufgefallen.
Ich wollte dieses Script (http://powershell.com/cs/blogs/tips/arc ... words.aspx) per ExecWith Powershell ausführen und habe es direkt von der Seite in die entsprechende Sektion kopiert.
Beim Ausführen erhielt ich allerdings immer folgende Fehlermeldung:

Code: Alles auswählen

retrieving strings from GetOutStreamFromSection [switch to loglevel 7 for debugging]
(string   0)Fehlende schließende "}" im Anweisungsblock.
(string   1)Bei C:\opsi.org\tmp\_opsiscript_Ga83Co31.ps1:11 Zeichen:1
(string   2)+  <<<<
(string   3)    + CategoryInfo          : ParserError: (CloseBraceToken:TokenId) [], Parse
(string   4)   Exception
(string   5)    + FullyQualifiedErrorId : MissingEndCurlyBrace
(string   6)


Beim direkten kopieren in den Powershell Editor wurde das Script auch korrekt ausgeführt.
Nach ewigem Trial and Error habe ich heraus gefunden dass die schließende geschweifte Klammer nicht in einer neuen Zeile stehen darf.

Der folgende Code bricht mit dem oben geposteten Fehler ab.

Code: Alles auswählen

function Get-RandomPassword {
   param(
      $length = 10,
      $characters =
 'abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789!"§$%&/()=?*+#_'
   )
   # select random characters
   $random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
   # output random pwd
   $private:ofs=""
   [String]$characters[$random]
}


So funktioniert es ohne Fehler:

Code: Alles auswählen

function Get-RandomPassword {
   param(
      $length = 10,
      $characters =
 'abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789!"§$%&/()=?*+#_'
   )
   # select random characters
   $random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
   # output random pwd
   $private:ofs=""
   [String]$characters[$random] }


Anscheinend wird die Übergabe des Codes irgendwie durch den Winst beeinflusst.
Falls sich der Bug nicht so einfach fixen lässt, wäre ein Hinweis im Handbuch sehr nett :-)

Benutzeravatar
d.oertel
uib-Team
Beiträge: 3269
Registriert: 04 Jun 2008, 14:27

Re: Geschweifte Klammern und ExecWith Powershell

Beitragvon d.oertel » 27 Mai 2016, 18:35

Hi,

wenn opsi-script im quelltext auf eine öffende eckige Klammer stößt wird dies für den beginn einer neuen Sektion gehalten.

deswegen fhrt das folgende script den Befehl '[huhu]' nicht aus (keine Fehlermeldung von der cmd.exe sondern die mutmaßung das
[dosInAnIcon_test] leer ist:

Code: Alles auswählen

[actions]
dosInAnIcon_test
[dosInAnIcon_test]
[huhu]
[stop]


Wenn man die Eckige Klammer in einer Variabele Versteckt funktioniert es:

Code: Alles auswählen

[actions]
defvar $open_square_barcket$
set $open_square_barcket$ ='['
dosInAnIcon_test
[dosInAnIcon_test]
rem [huhu]
$open_square_barcket$huhu]

[stop]


git den Log:

Code: Alles auswählen

[5] [Mai 27 18:21:53:325] dosInAnIcon_test
[6] [Mai 27 18:21:53:327]   c:\opsi.org\tmp\_opsiscript_Rr06Gp49.cmd saved back
[6] [Mai 27 18:21:53:328]   Executing "cmd.exe" /C c:\opsi.org\tmp\_opsiscript_Rr06Gp49.cmd
[6] [Mai 27 18:21:53:535]   ExitCode 1
[6] [Mai 27 18:21:53:539]               
[6] [Mai 27 18:21:53:543]               output:
[6] [Mai 27 18:21:53:547]               --------------
[6] [Mai 27 18:21:53:551]               
[6] [Mai 27 18:21:53:555]               N:\uib\oertel\svnwork\svn-opsi-org\opsi-winst\branches\4.11.6>rem [huhu]
[6] [Mai 27 18:21:53:559]               
[6] [Mai 27 18:21:53:563]               N:\uib\oertel\svnwork\svn-opsi-org\opsi-winst\branches\4.11.6>[huhu]
[6] [Mai 27 18:21:53:567]               Der Befehl "[huhu]" ist entweder falsch geschrieben oder
[6] [Mai 27 18:21:53:569]               konnte nicht gefunden werden.
[6] [Mai 27 18:21:53:571]   
[6] [Mai 27 18:21:53:574]   Delete "c:\opsi.org\tmp\_opsiscript_*"


gruß
detlef oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org

dark alex
Beiträge: 279
Registriert: 11 Mär 2015, 10:09

Re: Geschweifte Klammern und ExecWith Powershell

Beitragvon dark alex » 31 Mai 2016, 09:09

Aber warum geht dann Variante 2? Da sind doch auch die [...] vorhanden - vor der Klammer

Benutzeravatar
d.oertel
uib-Team
Beiträge: 3269
Registriert: 04 Jun 2008, 14:27

Re: Geschweifte Klammern und ExecWith Powershell

Beitragvon d.oertel » 01 Jun 2016, 17:36

Hi,

ich habe mir das nochmal genau angeschaut und nachvollzogen.
Ich hatte das Problem schon richtig gesehen: es liegt nicht an der geschweiften klammer sondern an der eckigen.
Ich war nicht ganz korrekt mit der Aussage
wenn opsi-script im quelltext auf eine öffende eckige Klammer stößt wird dies für den beginn einer neuen Sektion gehalten.

Richtig ist:
----------------
Wenn opsi-script im quelltext auf eine Zeile stößt welche ohne Berücksichtigung der Leerzeichen mit einer öffende eckige Klammer beginnt und mit einer schließenden Eckigen Klammer endet, so wird dies für den beginn einer neuen Sektion gehalten.
----------------
Die Zeile:

Code: Alles auswählen

[String]$characters[$random]

Erfüllt dieses Kriterium und wird daher nicht mehr in die temporäre Datei übernommen.

Die Zeile:

Code: Alles auswählen

[String]$characters[$random] }

Erfüllt dieses Kriterium nicht und wird daher in die temporäre Datei übernommen.

Auch sowas geht:

Code: Alles auswählen

[actions]
defvar $open_square_barcket$
set $open_square_barcket$ ='['

execwith_test powershell

[execwith_test]
function Get-RandomPassword {
   param(
      $length = 10,
      $characters =
 'abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789!"§$%&/()=?*+#_'
   )
   # select random characters
   $random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
   # output random pwd
   $private:ofs=""
   $open_square_barcket$String]$characters[$random]
   }


Ich werde dieses Thema der 'vermeintlichen neuen Sektionen' demnächst im Handbuch dokumentieren.

gruß
detlef oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org