Ordner erstellen mit NTFS Berechtigung

  • Hallo,

    ich soll für einen Kunden ein Skript schreiben, mit dem er einen Ordner erstellen kann und direkt vorbestimmte sets von NTFS Berechtigungen setzen kann. Nun, ich habe 0 erfahrungen mit AutoIT und ein paar fragen:

    ist es möglich ein Dropdown Menü zu gestalten, wo der User ein Set von Berechtigungen auswählen kann?

    ist es möglich, 2 Fenster gleichzeitig anzeigen zu lassen?
    Also zum Beispiel: Ganz links ein Auswahlmenü zum Speicherort, wo auch der Name des Ordners angegeben werden kann, in der Mitte ein Set an Berechtigungen per Drop Down, und rechts ein "Speichern" Button?

    Bisher konnte ich solche Elemente nur Sequentiell aufrufen.

    wäre über jede hilfe Dankbar, meine Erfahrungen beschränken sich auf ein wenig C++ und Delphi programmierung.

    Gruß

    Xantos

  • Ok, bin einen schritt weiter!

    Ich habe einen Code, der einen Ordner erstellen soll den man in einem Input Feld seinen namen geben Soll. Nur funktioniert das nicht!

    im Grunde funktioniert das, nur heisst der Ordner immer "4". ich hab da wahrscheinlich irgendwas mit der Variablenzuweisung falsch oder so. Kann jemand helfen?

  • danke, hat geklappt!

    jetzt noch eine frage zum NTFS dingens und das tool funktioniert ;)

    Code
    RunWait(@ComSpec & ' /k cacls c:\& GUICTRLRead($Foldername) /T /E /G "jeder:f" ', '', @SW_SHOW)

    wie kann ich dabei die Variable richtig einbinden? mit " " gehts nicht, mit ' ' auch nicht. oder ist das komplett die falsche herrangehensweise?

  • Hier die Befehlsyntax


    CaclsZeigt DACL-Dateien (Discretionary Access Control List, Freigegebene Zugriffsliste) an oder ändert diese.

    Syntax
    cacls Dateiname [/t] [/e] [/code] [/g Benutzer:Berechtigung] [/r Benutzer [...]] [/p Benutzer:Berechtigung [...]] [/d Benutzer [...]]

    Parameter
    Dateiname
    Erforderlich. Zeigt die DACLs der angegebenen Dateien an.
    /t
    Ändert die DACLs der angegebenen Dateien im aktuellen Verzeichnis und allen Unterverzeichnissen.
    /e
    Bearbeitet eine DACL, anstatt sie zu ersetzen.
    /c
    Setzt das Ändern der DACLs fort, ohne Fehler zu beachten.
    /g Benutzer:Berechtigung
    Erteilt dem angegebenen Benutzer Zugriffsrechte. In der folgenden Tabelle sind gültige Werte für Berechtigung aufgeführt. Wert Beschreibung
    n Keine
    r Lesen
    w Schreiben
    c Ändern (Schreiben)
    f Vollzugriff

    /r Benutzer
    Entzieht dem angegebenen Benutzer Zugriffsrechte.
    /p Benutzer:Berechtigung
    Ersetzt Zugriffsrechte für den angegebenen Benutzer. In der folgenden Tabelle sind gültige Werte für Berechtigung aufgeführt. Wert Beschreibung
    n Keine
    r Lesen
    w Schreiben
    c Ändern (Schreiben)
    f Vollzugriff

    /d Benutzer
    Verweigert dem angegebenen Benutzer den Zugriff.
    /?
    Zeigt Hilfe an der Eingabeaufforderung an.
    Hinweise
    Anhand der folgenden Tabelle können Sie die Ergebnisse auswerten. Ausgabe ACE gilt für
    OI Diesen Ordner, Dateien
    CI Diesen Ordner, untergeordnete Ordner
    IO Der ACE gilt nicht für die aktuelle Datei/das aktuelle Verzeichnis.
    Keine ausgegebene Meldung Nur diesen Ordner
    (IO)(CI) Diesen Ordner, untergeordnete Ordner und Dateien
    (OI)(CI)(IO) Nur untergeordnete Ordner und Dateien
    (CI)(IO) Nur untergeordnete Ordner
    (OI)(IO) Nur Dateien

    Sie können Platzhalterzeichen (d. h. * und ?) verwenden, um mehrere Dateien anzugeben.
    Sie können mehrere Benutzer angeben.
    Formatting legend
    Format Meaning
    Italic Information that the user must supply
    Bold Elements that the user must type exactly as shown
    Ellipsis (...) Parameter that can be repeated several times in a command line
    Between brackets ([]) Optional items
    Between braces ({}); choices separated by pipe (|). Example: {even|odd} Set of choices from which the user must choose only one
    Courier font Code or program output

  • mmh, dass hilft mir nicht wirklich weiter. Ich muss ja irgendwie in diesen Befehl meine Variable aus AutoIT implementieren. Wenn ich das so richtig sehe, ist das ein DOS befehl, oder? Ich kann ja schlecht im CMD Fenster $Variable aufrufen, woher soll der denn wissen welche da gemeint ist?

    Dann ist mir grade noch aufgefallen, dass ich noch nicht weiss, wie ich abfrage welches feld in meinem DropDown menü ausgewählt ist?!

  • [autoit]

    RunWait(@ComSpec & ' /k cacls "c:\' & GUICTRLRead($Foldername) & '" /T /E /G "jeder:f" ', '', @SW_SHOW)

    [/autoit]


    Pfad in Anführungszeichen weil der Ordner könnte auch auch Leerzeichen beinhalten, die automatisch zu einem Fehler führen würden. Gruss Jan

  • Spuckt mir immer 2 aus, macht es aber in der Demo der Help Datei auch ?!
    Kann es sein, das damit die auswahl immer auf die 2. Möglichkeit gesetzt wird?

    Ziel ist es, dass ich per If abfragen kann welches Set gewählt ist, und entsprechend Berechtigungen setzen kann.


    €dit/

    Danke schonmal für die Super hilfe hier, ist echt Cool von euch!

  • Hi, hast Du auch oben

    [autoit]

    #Include <GuiComboBox.au3>

    [/autoit]

    eingefügt? Übrigens gezählt wird immer von 0 an. willst Du das dritte Element in der Combo ansprechen nimm die 2 (1. Element= 0 , 2.Element = 1, 3. Element = 2 usw)

    [autoit]

    Func NTFSSel()
    _GUICtrlComboBox_SetCurSel ($Combo, 2)
    MsgBox(4160, "Information", "Aktuelles NTFS Set " & _GUICtrlComboBox_GetCurSel ($Combo))
    EndFunc

    [/autoit]


    Gruss Jan

  • [autoit]

    GUICtrlCreatelabel ("NTFS Set", 100,10)
    $Combo = GUICtrlCreateCombo ("Set1", 100,40) ; Liste Erstellen
    GUICtrlSetData(-1,"Set2|Set3","Set3") ; Items hinzufügen, default setzen
    GUISetState ()

    [/autoit]

    sollte lieber so lauten:

    [autoit]

    GUICtrlCreatelabel ("NTFS Set", 100,10)
    $Combo = GUICtrlCreateCombo ("", 100,40) ; Liste Erstellen
    GUICtrlSetData(-1,"Set1|Set2|Set3","Set3") ; Items hinzufügen, default setzen
    GUISetState ()

    [/autoit]


    Gruss Jan

  • Guten Morgen,

    ich hab mittlerweile das Tool soweit Fertig, jedoch sind da noch ein paar Sachen die mich stören.

    1. Wenn ich den Befehl

    [autoit]


    RunWait(@ComSpec & '/k cacls "c:\Test1' & GUICTRLRead($Foldername) & '" /T /E /G "jeder:r" ', '',@SW_SHOW)

    [/autoit]

    ausführe, bleibt das Dosfenster geöfnet, und das Programm wird erst weiter ausgeführt wenn ich es manuell schliesse. Habe auch schon @SW_Hide o.ä. Ausprobiert.

    die 2. sache ist, das ich wenn ich z.b.

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

    RunWait(@ComSpec & '/k cacls "c:\Test1' & GUICTRLRead($Foldername) & '" /T /E /G "jeder:w" ', '',@SW_SHOW)

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

    ausführe, ich eine meldung "Zugriff Verweigert" bekomme. dazu ist vieleicht der Ganze Code hilfreich:
    [Hat sich erledigt]

    Jemand ne idee?

    Edit/

    ok, für das Problem mit dem Zugriff verweigert habe ich die lösung gefunden, hatte einen \ bei der Pfadangabe vergessen, und ein Leerzeichen vor dem befehl.

    Allerdings bleibt das Dos Fenster immer noch offen.

    2 Mal editiert, zuletzt von xantos (21. April 2008 um 10:04)

  • cacls verlang immer eine Bestätigung. Diese lässt sich aber nicht automatisch hinzufügen.
    Unter XP benutze den Befehl "Xcalcs /* /* /* user:F /Y". Für die Wildcarts gelten die gleichen Optionen wie bei cacls

    Viel erfolg

  • Wenn das Thema gelöst ist, dann kannst du es auch gerne als gelöst markieren :)
    Für das Problem mit dem "Zugriff verweigert" hast du keine Lösung gefunden oder? Ich habe nämlich das selbe Problem, obwohl die Rechte übernommen werden...