Links zu den Foren
   
PowerShell Anwendergruppe Forum
 
  Forum   Programmierung ...  Allgemeines  Aufruf von Kommandozeilenprogramm mit Parametern
Previous Previous
 
Next Next
New Post 8/11/2008 12:37 PM
Resolved
  Gubblegubble
4 posts
No Ranking


Aufruf von Kommandozeilenprogramm mit Parametern  (Germany)
Hallo,

um zu Lernen, wie man mit der Powershell umgeht habe ich mir das Ziel gesetzt neue Scripte nur noch als Powershell zu schreiben. Funktioniert eigentlich auch immer soweit recht gut, aber jetzt hänge ich an einer relativ ?einfachen? Sache.

Ich wollte bei einem Ordner die vererbten Rechte rausnehmen und dafür andere setzen, die dann aber auch wieder auf alles darunter vererbt werden.

Hätte ich auch soweit mit Befehlen um get-ACL und set-ACL geschafft (bei Bedarf würd ich sie hier auch posten).
Mit nur einem Schönheitsfehler, ich habe zwar auf den Ordner Vollzugriff (und kann auch per GUI, meine gewünschten Änderungen machen), aber bin kein Admin auf der Maschine die den Ordner beherbergt.
Dadurch bekomme ich bei der Ausführung des Scripts einen sesecuritypolicy Fehler und es klappt nicht, auf einer Maschine mit Adminrechten klappt das selbe Script.

Ok, denk ich mir, zwar schade aber hilft nix, dann mach ichs hald so wie schon zu vbscript Zeiten. Man nehme das Opensource Tool setacl.exe, das hat solche Probleme nicht (natürlich erst mal in einer cmd getestet -> OK)

In der PS:
(Also im Verzeichnis, in dem setacl.exe liegt)
$Ordner = "c:\test\Ordner1"
./setacl.exe -on $Ordner -ot file -actn setprot -op "dacl:p_nc"

Befehl flutscht problemlos durch und killt die Vererbung + Berechtigungen.
Also zweiter Befehl:
./setacl.exe -on $Ordner -ot file -actn ace -ace "n:DOMAIN\LOK-Admins";p:full;i:so,sc;m:set

+++FEHLER:
Die Benennung "p:full:i:so" wurde nicht als Cmdlet, Funktion, ausführbares Programm oder Skriptdatei erkannt. Überprüfe
n Sie die Benennung, und versuchen Sie es erneut.
Bei Zeile:1 Zeichen:110
+ ./setacl.exe -on "c:\test\Ordner1" -ot file -actn ace -ace "n:\DOMAIN\LOK-Admins";p:full:i:so, <<<< s
c;m:set
Die Benennung "m:set" wurde nicht als Cmdlet, Funktion, ausführbares Programm oder Skriptdatei erkannt. Überprüfen Sie
die Benennung, und versuchen Sie es erneut.
Bei Zeile:1 Zeichen:118
+ setacl.exe -on "c:\test\Ordner1" -ot file -actn ace -ace "n:\DOMAIN\LOK-Admins";p:full:i:so,sc;m:se
t <<<<
(Zeichenberechnungen stimmen nicht, da ich die Variablen zum Posten vereinfacht habe)
+++


Also freut er sich nicht besonders über die Semikolon (ist ja auch irgendwo verständlich).

Kann ich das jetzt irgendwie verpacken, so daß er mich versteht ?
Aus einer CMD raus funktioniert der Befehl natürlich. Man könnte nun freilich ne CMD aufrufen und den Befehl an die übergeben, aber naja...
Wenn schon denn schon ;)

Bin über jede Anregung dankbar :)

Gruß

Rainer





 
New Post 8/11/2008 1:19 PM
  Rolf
198 posts
www.powershell-ag.de
1st Level Poster


Re: Aufruf von Kommandozeilenprogramm mit Parametern  (N/A)

Hallo Rainer,

das Thema kommt daher, das die PowerShell die verwendeten Zeichen, also ; " : etc. , versucht im Sinne der PowerShell Befehle zu verarbeiten.
Besonderer Stolperstein ist/sind dabei immer wieder doppelte Anführungszeichen (")
Übergebe mal die ganzem Parameter in einfachen Hochkomma. Also so:

./setacl.exe -on $Ordner -ot file -actn ace -ace '"n:DOMAIN\LOK-Admins";p:full;i:so,sc;m:set'

Es keine generelle Regel gibt, mit der "Nicht PowerShell Programme" Parameter übergeben bekommen können.
Wenn du das dann noch, wie am Beispiel $Ordner gezeigt, Variablen verwenden möchtest, wird es etwas komplexer.
Die Regel lautet aber: Zeichenketten in doppelten Anführungszeichen mit Variablen darin werden aufgelöst d.h. die Werte der Variablen werden verwendet.
Bei Zeichenketten mit einfachen Anführungszeichen wird das nicht gemacht.
Weiterhin habe ich schlechte Erfahrungen mit Parametern gemacht, wenn sie mit einem Bindestrich eingeleitet werden. 
Auch hier helfen die jeweiligen Anführungsstriche weiter. Ich hoffe die Antwort gibt dir den Hinweis in die richtige Richtung.
Der Aufruf von SetACL wie in diesem Beispiel hat bei mir aber dann reibungslos geklappt.
Gruß
Rolf

 
New Post 8/11/2008 2:18 PM
  Gubblegubble
4 posts
No Ranking


Re: Aufruf von Kommandozeilenprogramm mit Parametern  (Germany)
Vielen Dank Rolf für die prompte Antwort!

Ja, das funktioniert. Danke! an dieses Hochkommata muß ich mich noch erst mal gewöhnen, daran denke ich immer nicht, daß es das jetzt auch noch gibt...

Aber wie du schon vermutet hast, jetzt müßte noch eine Variable statt dem User/Gruppe "DOMAIN\LOK-Admins" rein.
Das wird jetzt aber mit geschickter Zeichensetzung nichts mehr oder?
Ich seh da mom. keinen Ansatzpunkt... Hast du oder sonst noch jemand nen Tip/Idee?
 
New Post 8/11/2008 4:17 PM
  Helmut
168 posts
1st Level Poster


Re: Aufruf von Kommandozeilenprogramm mit Parametern  (Germany)
Modified By Helmut  on 8/11/2008 4:26:11 PM)

Hallo Rainer,

an und für sich ist es einfach, das geht auf die, ich nenn sie VBscript Art einfach so:

$gruppe = 'DOMAIN\LOK-Admins'

./setacl.exe -on $Ordner -ot file -actn ace -ace ('"n:'+$gruppe+'";p:full;i:so,sc;m:set')

Etwas anders, in PowerShell mit den von Rolf angesprochenen Ersetzen wenn der Text in doppelten Anführungszeichen ist:

./setacl.exe -on $Ordner -ot file -actn ace -ace ("`"n:$gruppe`";p:full;i:so,sc;m:set")

Die Klammern sind deswegen da, dass PowerShell erst diesen Textbestandsteil zuerst abarbeitet, sind aber in diesem Fall nicht zwingend nötig glaube ich. Aber Sicherheit geht vor

Viele Grüße

Helmut

 
New Post 8/11/2008 6:27 PM
  Gubblegubble
4 posts
No Ranking


Re: Aufruf von Kommandozeilenprogramm mit Parametern  (N/A)

Hallo Helmut,

 

vielen Dank, hinter dieses Hochkommata muß ich erst noch kommen ;)

Auf die Antwort von Rolf hab ich schon damit rumexperimentiert, aber sie quasi ineinander zu benutzen, da hat es den Zündfunken nicht gegeben :)

Bisher war ' nur zum auskommentieren da

Beispiel 2 muß ich mir morgen nochmal in Ruhe ankucken.

 

Nochmal vielen Dank euch beiden, normalerweise kommt man ja mit googlen mittlerweile schon recht weit mit der Powershell, aber wenn man Google nur mit powershell  + ',",exe, und anderen "nichtssagenden" Begriffen füllen kann, hilft es einem auch nicht weiter.

 
Previous Previous
 
Next Next
  Forum   Programmierung ...  Allgemeines  Aufruf von Kommandozeilenprogramm mit Parametern