Benutzer mit den meisten Antworten
PS Script für Öffentliche Ordner optimieren

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"
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
-
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
OrdnerCDann 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
Alle 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
-
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
-
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 -
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ührung1x der $Pfad (Ordner)
1-4 x &UserWie 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
ijVielen Dank für deine Unterstützung.
-
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
OrdnerCDann 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 -
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:-)