Powershell Command aus AUTOIT ausführen

  • Hallo,

    ich hab mal wieder ein kleines Problem und weiß nicht wie ich es am besten lösen soll. Ich möchte eine kleine GUI bauen, in die ich Daten zu einem NTFS/DFS Ordner eingebe und wenn man auf ausführen geht,
    soll aus AUTOIT ein Powershell-Befehl zur Erstellung einer AD Gruppe und Ordner ausgeführt werden und die Parameter aus der GUI übergeben werden.

    Ich dachte ich könnte das so lösen:

    $Powershell = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe import-module activedirectory new-adgroup -name" & $Input1 & " -path ..." usw.

    Leider wird das Powershellfenster nur kurz geöffnet und gleich wieder geschlossen. Passieren tut leider nichts.

    Kennt sich hier jemand aus?

    Wäre für jede Hilfe dankbar

    Einmal editiert, zuletzt von SvenKi (26. November 2014 um 14:50)

  • Bitteschön :)

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite(_PowerShell_Command('get-process | sort-object ProcessName'))

    [/autoit][autoit][/autoit][autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit][autoit][/autoit][autoit]

    Func _PowerShell_Command($sCommand)
    Local $iPID = Run(StringFormat('"%s" "%s"', 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe', $sCommand), @ScriptDir, @SW_HIDE, 0x2)
    Local $sOut

    [/autoit][autoit][/autoit][autoit]

    Do
    $sOut &= StdoutRead($iPID)
    Until @error

    [/autoit][autoit][/autoit][autoit]

    StdioClose($iPID)
    Return $sOut
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]

    Einmal editiert, zuletzt von Yjuq (24. November 2014 um 15:57)

  • Guten Morgen Make Grafik

    und danke für deine Antwort. Funktionier soweit ganz gut, nur importiert er mir das AD Modul nicht mit rein, somit kann ich nicht auf die AD Zugreifen und die Cmdlets benutzen.
    Hast du hier noch eine Idee? Wenn man Powershell startet, geht das einfach mit dem Befehl Import-Module ActiveDirectory.

    Ich habe es hier versucht, in dem ich die Zeile so anpasse:

    Code
    ConsoleWrite(_Powershell_Command('Import-Module ActiveDirectory | new-ADGroup ...'))

    Vielen Dank für weitere Hilfe

  • Hallo Aspirin-Junkie,

    ich starte das Skript mit meinem Benutzer und ich bin Domänen Admin. Somit sollte das mit den Rechten passen. Den Befehl in der Powershell kann ich ohne weiteres ausführen.

  • #RequireAdmin ist erst einmal unabhängig davon, von welchem User es aufgerufen wird.
    Es dient der Handhabung der UAC.
    Wenn du also manuell als User eine UAC-Meldung ("Möchten sie zulassen, dass das folgende Programm...") bekommst, dann brauchst du im Skript auch ein #RequireAdmin.

  • Es gibt zwei getrennte Aufgaben:

    • Erstellung der Gruppen im AD

      • AD.au3 ist die Library mit den AD-UDFs, da gibt es gute Hilfedateien zu den Befehlen: http://www.autoitscript.com/forum/topic/10…-directory-udf/
      • _AD_Open() am Anfang
      • Meine Funktion ADInteraktion erstellt über den Befehl _AD_CreateGroup die Gruppe im AD
      • _AD_Close() durch OnAutoItExitRegister am Schluss
    • Erstellung der Berechtigungen in den Ordnern (kein AD-Zugriff notwendig)

      • Permissions.au3 ist die Library mit den Berechtigungs-UDFs: http://www.autoitscript.com/forum/topic/13…ermissions-udf/
      • _EditObjectPermissions (behält vorhandene) oder _SetObjectPermissions (löscht vorhandene) für die Berechtigungsänderungen. Die Befehle sind auch in der permissions.au3 erklärt
      • Ich habe in meinem Skript die Befehle noch um eine Fehlerbehandlung ergänzt.
      • Für das Setzen der Berechtigungen sind (leider) volle Admin-Rechte notwendig. Wenn ich mich richtig erinnere, hat requireadmin nichts genutzt
  • So, die Lösung von Make Grafik hat doch funktioniert.
    Allerdings muss man den Import Befehl gesondert ausführen.

    Danke für eure Bemühungen. Das nächste Thema wird gleich eröffnet ;)