none
PS Script für Öffentliche Ordner optimieren RRS feed

  • Frage

  • Hallo,

    ich lege sehr viele Öffentliche Ordner an und richte Userberechtigungen für diese Ordner und für "Send As" ein.

    Für jede Anweisung und für jeden User gibt es eine eigene Programmzeile. So muss ich Zeilen Kopieren bzw. entfernen je nach dem wie viele User berechtigt werden sollen.

    Nun möchte ich Str-Variablen oder Arrays einsetzen um Die Fehlerquelle und mehrfache Arbeit zu reduzieren.

    Habe sehr viel im Internet recherchiert ohne zu diesem Thema Ansätze oder Beispiele zu finden.

    Habe einiges ausprobiert. Str-Variablen in Verbindung mit IF-Schleifen und geschweifte Klammern.

    Es hat nicht funktioniert. Ich bin Sicher Ihr könnt mir auf die Sprünge helfen.

    Hier mal mein Standard Script. Ich freue mich über Anregungen und wenn ihr mir Zeigt wie es gemacht wird.

     Vilen Dank für Euere Unterstützung

    # Folder anlegen
    New-PublicFolder -Name "0101546 Peter Pan"
    New-PublicFolder -Name Ausgang -Path "\0101546 Peter Pan"
    
    # Default user sperren
    Remove-PublicFolderClientPermission "\0101546 Peter Pan" -User Default -AccessRights ReadItems, FolderVisible, EditOwnedItems, DeleteOwnedItems -Confirm:$False
    
    # User und Zugriffsrechte setzen
    Add-PublicFolderClientPermission "\0101546 Peter Pan" -User ab -AccessRights PublishingEditor
    Add-PublicFolderClientPermission "\0101546 Peter Pan" -User cd -AccessRights PublishingEditor
    Add-PublicFolderClientPermission "\0101546 Peter Pan" -User ef -AccessRights PublishingEditor
    Add-PublicFolderClientPermission "\0101546 Peter Pan" -User gh -AccessRights PublishingEditor
    Add-PublicFolderClientPermission "\0101546 Peter Pan" -User ij -AccessRights PublishingEditor
    
    # Mailadresse per Alias setzen (Exchange liest Alias und setzt automatisch die Adressen für alle Domänen)
    Enable-MailPublicFolder "\0101546 Peter Pan"
    Set-MailPublicFolder "\0101546 Peter Pan" -Alias peterpan
    
    # Berechtigung "Senden als" setzen
    Add-ADPermission "0101546 Peter Pan" -User ab -Extendedrights "Send As"
    Add-ADPermission "0101546 Peter Pan" -User cd -Extendedrights "Send As"
    Add-ADPermission "0101546 Peter Pan" -User ef -Extendedrights "Send As"
    Add-ADPermission "0101546 Peter Pan" -User gh -Extendedrights "Send As"
    Add-ADPermission "0101546 Peter Pan" -User ij -Extendedrights "Send As"

    Freitag, 19. Juni 2015 16:07

Antworten

  • Hallo,

    bin mir nicht sicher ob ich dich richtig verstehe, ich denke du willst deinen Code verschlanken, hier ein Tipp.

    Speichere die User in einer Textdatei, Zeile fuer Zeile also:

    User1
    User2

    usw. gib der Datei einen Namen z.B.: user.txt, dann kannst Du mit folgendem Code allen Usern in der Datei die gewuenschten Rechte zuweisen,

    Foreach ($User in (Get-Content .\user.txt)) {
    	Add-PublicFolderClientPermission "\0101546 Peter Pan" -User $User -AccessRights PublishingEditor
    }

    und musst nicht mehr pro User eine Zeile schreiben, das kannst Du dann an den anderen Stellen auch so machen, also bei den SEND AS Rechten usw.

    Jenachdem gibt es auch noch mehr Potential.

    Beste Gruesse
    brima



    • Bearbeitet brima Montag, 22. Juni 2015 10:08
    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:04
    • Tag als Antwort aufgehoben Hajola Donnerstag, 25. Juni 2015 11:04
    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:04
    Montag, 22. Juni 2015 10:02
  • Hallo,

    foreach ($Ordner in (Get-Content .\ordner.txt) {
    	# Hier kommen dann die Befehle, fuer den Ordner
    	New-PublicFolder -Name "$Ordner Peter Pan"
    	New-PublicFolder -Name Ausgang -Path "\$Ordner"
    	...
    	# Hier alles fuer die User in diesem Ordner
    	Foreach ($User in (Get-Content .\user.txt)) {
    		Add-PublicFolderClientPermission "\$Ordner" -User $User -AccessRights PublishingEditor
    		...
    	}
    }


    Damit kannst Du dann einen Ordner mit den Usern anlegen, d.h. du hast eine Datei die den Ordner enthaelt, und eine fuer die User.

    Jetzt koenntest Du z.B.: auch mehrere Ordner fuer die gleichen User anlegen, die auessere Shleife laueft ja pro Ordner und die innere fuer alle User in der Datei. Sollten es aber mehrere Ordner sein, die unterschiedliche Ordner bedienen sollen ist auch dies kein Problem, dann hast Du halt mehrere User Dateien, in deren Dateiname der Ordner steckt, damit die innere Schleife weis welche Datei sie nehmen muss.

    z.B.: stehen in der Datei ordner.txt

    OrdnerA
    OrdnerB
    OrdnerC

    Dann legst du die Dateien an: user-OrdnerA.txt, user-OrdnerB.txt, user-OrdnerC.txt mit den gewuenschten Usern.

    Dann musst Du jetzt noch in innere Schleife anpassen und schon werden pro Ordner die richtigen User gefunden.

    foreach ($Ordner in (Get-Content .\ordner.txt) {
    	# Hier kommen dann die Befehle, fuer den Ordner
    	New-PublicFolder -Name "$Ordner Peter Pan"
    	New-PublicFolder -Name Ausgang -Path "\$Ordner"
    	...
    	# Hier alles fuer die User in diesem Ordner
    	Foreach ($User in (Get-Content .\user-$Ordner.txt)) {
    		Add-PublicFolderClientPermission "\$Ordner" -User $User -AccessRights PublishingEditor
    		...
    	}
    }

    Natuerlich kann man das ein oder andere noch eleganter machen, aber nicht vergessen das ist ein Forum um Hilfe zu bekommen, nicht um Scripte nach Wunsch zu bestellen. :-)

    Jetzt kannst Du ja mal mit den neuen Erkenntnissen spielen, dann kannst Du dir die Frage nach den Leerzeichen auch selbst beantworten...

    Man kann natuerlich auch mit nur einer Datei arbeiten, aber davon wuerde ich abraten.

    Beste Gruesse
    brima

    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:02
    • Tag als Antwort aufgehoben Hajola Donnerstag, 25. Juni 2015 11:03
    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:05
    Mittwoch, 24. Juni 2015 18:43

Alle Antworten

  • Moin,

    bitte beschreibe nochmal, was du hier genau erreichen willst. Mach dir keine Gedanken über Schleifen, Variablen oder andere Ansätze.

    Gruß,

    Montag, 22. Juni 2015 09:45
  • Hallo,

    bin mir nicht sicher ob ich dich richtig verstehe, ich denke du willst deinen Code verschlanken, hier ein Tipp.

    Speichere die User in einer Textdatei, Zeile fuer Zeile also:

    User1
    User2

    usw. gib der Datei einen Namen z.B.: user.txt, dann kannst Du mit folgendem Code allen Usern in der Datei die gewuenschten Rechte zuweisen,

    Foreach ($User in (Get-Content .\user.txt)) {
    	Add-PublicFolderClientPermission "\0101546 Peter Pan" -User $User -AccessRights PublishingEditor
    }

    und musst nicht mehr pro User eine Zeile schreiben, das kannst Du dann an den anderen Stellen auch so machen, also bei den SEND AS Rechten usw.

    Jenachdem gibt es auch noch mehr Potential.

    Beste Gruesse
    brima



    • Bearbeitet brima Montag, 22. Juni 2015 10:08
    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:04
    • Tag als Antwort aufgehoben Hajola Donnerstag, 25. Juni 2015 11:04
    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:04
    Montag, 22. Juni 2015 10:02
  • Hallo Alexander,

    Ja wie Prima beschrieben hat geht es mir um das Verschlanken aber auch um den die Frage wie Schreibe ich dann das Script

    Dienstag, 23. Juni 2015 16:26
  • Hallo Prima,

    Das ist schon ein Ansatz mit dem ich bestimmte weiter komme.

    Also möchte ich unten ein Script schreiben das ich nicht mehr zu ändern brauch.

    Dafür aber jeweils nur die benötigten Daten vordefinieren.

    Meine Eingabe wäre dann

    $Path01=""0101546 Peter Pan""

    $Users="ab,cd,ef,gh,ij"

    Elegant natürlich auch über eine Datei. Dann muss ich die Scriptdatei gar nicht mehr öffnen.

    Kann mann beides "Users" und "Path" in einer txt-Datei angeben? oder braucht man 2 Dateien

    Wie liest das Script die Datei oder woran merkt es was User sind und was der Path ist?

    Vielen Dank

    Dienstag, 23. Juni 2015 16:30
  • Hallo,

    machen kann man viel, kommt auch darauf an was du anlegen willst, einen Ordner mit vielen Usern, viele Ordner fuer die gleichen User, viele Ordner fuer unterschiedliche User, ...

    Das $Users="ab,cd,ef,gh,ij" geht so nicht, du musst dann deine User als Array uebergeben.

    $Users = @('ab', 'cd', 'ef', 'gh', 'ij')

    Das das nicht elegant ist hast Du ja schon selbst festgestellt. Du kannst die User und PFade dem Script auch mit Argumenten bzw. Parameter uebergeben.

    get-help about_Functions_Advanced_Parameters

    Beste Grüße
    brima

    Dienstag, 23. Juni 2015 17:51
  • Ok vielen Dank erst mal,

    (Einen Ordner mit vielen Usern)

    werde mich hinsetzen und die gewonnenen Kenntnisse verarbeiten.
    Das mit den Argumenten hab ich gegoogelt ist recht kompliziert.
    Mein Weg wird dein ersten Vorschlag mit "Foreach ($User in (Get-Content ......." sein.
    Das heißt in die Datei kommt je Ausführung

    1x der $Pfad (Ordner)
    1-4 x &User

    Wie trenne ich die Information in der Datei und wie ist es mit den Anführungszeichen wegen Leerstellen im Text. Kann ich dem Script dann sagen ab wann sind User einzulesen?

    Durch Abschnitte

    --- $PathDat ----
    "0101546 Peter Pan"

    --- $UserDat ----
    ab
    cd
    ef
    gh
    ij

    Vielen Dank für deine Unterstützung.

    Mittwoch, 24. Juni 2015 14:55
  • Hallo,

    foreach ($Ordner in (Get-Content .\ordner.txt) {
    	# Hier kommen dann die Befehle, fuer den Ordner
    	New-PublicFolder -Name "$Ordner Peter Pan"
    	New-PublicFolder -Name Ausgang -Path "\$Ordner"
    	...
    	# Hier alles fuer die User in diesem Ordner
    	Foreach ($User in (Get-Content .\user.txt)) {
    		Add-PublicFolderClientPermission "\$Ordner" -User $User -AccessRights PublishingEditor
    		...
    	}
    }


    Damit kannst Du dann einen Ordner mit den Usern anlegen, d.h. du hast eine Datei die den Ordner enthaelt, und eine fuer die User.

    Jetzt koenntest Du z.B.: auch mehrere Ordner fuer die gleichen User anlegen, die auessere Shleife laueft ja pro Ordner und die innere fuer alle User in der Datei. Sollten es aber mehrere Ordner sein, die unterschiedliche Ordner bedienen sollen ist auch dies kein Problem, dann hast Du halt mehrere User Dateien, in deren Dateiname der Ordner steckt, damit die innere Schleife weis welche Datei sie nehmen muss.

    z.B.: stehen in der Datei ordner.txt

    OrdnerA
    OrdnerB
    OrdnerC

    Dann legst du die Dateien an: user-OrdnerA.txt, user-OrdnerB.txt, user-OrdnerC.txt mit den gewuenschten Usern.

    Dann musst Du jetzt noch in innere Schleife anpassen und schon werden pro Ordner die richtigen User gefunden.

    foreach ($Ordner in (Get-Content .\ordner.txt) {
    	# Hier kommen dann die Befehle, fuer den Ordner
    	New-PublicFolder -Name "$Ordner Peter Pan"
    	New-PublicFolder -Name Ausgang -Path "\$Ordner"
    	...
    	# Hier alles fuer die User in diesem Ordner
    	Foreach ($User in (Get-Content .\user-$Ordner.txt)) {
    		Add-PublicFolderClientPermission "\$Ordner" -User $User -AccessRights PublishingEditor
    		...
    	}
    }

    Natuerlich kann man das ein oder andere noch eleganter machen, aber nicht vergessen das ist ein Forum um Hilfe zu bekommen, nicht um Scripte nach Wunsch zu bestellen. :-)

    Jetzt kannst Du ja mal mit den neuen Erkenntnissen spielen, dann kannst Du dir die Frage nach den Leerzeichen auch selbst beantworten...

    Man kann natuerlich auch mit nur einer Datei arbeiten, aber davon wuerde ich abraten.

    Beste Gruesse
    brima

    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:02
    • Tag als Antwort aufgehoben Hajola Donnerstag, 25. Juni 2015 11:03
    • Als Antwort markiert Hajola Donnerstag, 25. Juni 2015 11:05
    Mittwoch, 24. Juni 2015 18:43
  • OK, Super, bringt mich jetzt sicher weiter.

    Klar nur zur Hilfe, sonst könnte ich mir das auch programieren lassen.

    Nein ich möchte PowerSchell beherschen lernen. Das geht nur mit eigenem Hirnschmalz.

    Aber deine Hilfe führt mich hierbei und das ist Super Vielen Dank.

    Melde mich wieder wenn ich soweit bin. Kann etwas dauern. Ergebnis bring ich dann mit.

    Bis dahin DANKE:-)

    Donnerstag, 25. Juni 2015 11:02