Enno Geschrieben 18. Juli 2012 Teilen Geschrieben 18. Juli 2012 Hallo alle zusammen. Ich bräuchte mal ne Änderung eines schon bestehenden Powershell Scripts. Problem ist, das es bei uns in den Zugriffsrechten der ÖO einigen Wildwuchs gibt. z.B. gibt es noch Rechte für User die garnicht mehr exisitieren. Ist: Script wird aufgerufen mit TopFolder, Username, Permission Und setzt dann ab diesem Folder die Rechte des Users in diesem und allen Unterordnern neu. Soll Aufruf ohne alles am Anfang festzulegender Parameter: TopFolder, Server Das Script soll dann in allen Unterordnern ALLE aktuell existierenden Berechtigungen bis auf Administrator aufheben und durch neue ersetzen. AddUsersToPfRecursive.ps1 # Copyright (c) 2006 Microsoft Corporation. All rights reserved. # # THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE RISK # OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE USER. Param( [string] $Server, [string] $TopPublicFolder = "", [string] $User = "", [string] $Permissions = "", [string] $confirmpreference ="none" ) # This function validates the scripts parameters function ValidateParams { $validInputs = $true $errorString = "" if ($TopPublicFolder -eq "") { $validInputs = $false $errorString += "`nMissing parameter: The -TopPublicFolder parameter is required. Please pass in a valid Public Folder path, name, or entryID." } if ($User -eq "") { $validInputs = $false $errorString += "`nMissing parameter: The -User parameter is required. Please pass in a valid user name, email address or GUID" } if ($Permissions -eq "") { $validInputs = $false $errorString += "`nMissing parameter: The -Permissions parameter is required. Please pass in a valid MAPI permission set" } if (!$validInputs) { Write-error "$errorString" } return $validInputs } # Function that returns true if the incoming argument is a help request function IsHelpRequest { param($argument) return ($argument -eq "-?" -or $argument -eq "-help"); } # Function that displays the help related to this script following # the same format provided by get-help or <cmdletcall> -? function Usage { @" NAME: `tAddUsersToPFRecursive.ps1 SYNOPSIS: `tAdds a specific user with specific permissions to the client `tpermissions list for a public folder, and all the contained folders `tunder it. If the user is already listed in the client permissions list `tfor a particular folder, the user's permissions are updated to the new `tspecified set. SYNTAX: `tAddUsersToPFRecursive.ps1 `t`t[-Server <ServerIdParameter>] `t`t[-TopPublicFolder <PublicFolderIdParameter>] `t`t[-User <PublicFolderUserIdParameter>] `t`t[-Permissions <PublicFolderAccessRight collection>] PARAMETERS: `t-Server (optional) `t`tThe server to operate against. Must be an Exchange 2007 Mailbox server `t`twith a public folder database. Defaults to a convenient server. `t-TopPublicFolder (required) `t`tThe folder identity of the top of the tree of folders to modify `t-User (required) `t`tThe identity of the user to add to the client permissions. `t-Permissions (required) `t`tA MAPI client permission set `t-------------------------- EXAMPLE 1 -------------------------- C:\PS> .\AddUsersToPFRecursive.ps1 -TopPublicFolder "\Folder" -User "user" -Permissions {Reviewer,Owner} `t-------------------------- EXAMPLE 2 -------------------------- C:\PS> .\AddUsersToPFRecursive.ps1 -Server "MyEx2007Server" -TopPublicFolder "\Folder" -User "user" -Permission {Reviewer,Owner} RELATED LINKS: `tAddUsersToPFRecursive.ps1 `tRemoveUserFromPFRecursive.ps1 `tReplaceUserPermissionOnPFRecursive.ps1 `tReplaceUserWithUserOnPFRecursive.ps1 `tGet-Help "@ } #################################################################################################### # Script starts here #################################################################################################### # Check for Usage Statement Request $args | foreach { if (IsHelpRequest $_) { Usage; exit; } } # Validate the parameters $ifValidParams = ValidateParams; if (!$ifValidParams) { exit; } if ($server) { $getpfcmd = "get-publicfolder -server $Server -identity $TopPublicFolder -Recurse -resultsize unlimited" } else { $getpfcmd = "get-publicfolder -identity $TopPublicFolder -Recurse -resultsize unlimited" } invoke-expression $getpfcmd | foreach { $permission = get-PublicFolderClientPermission -identity $_.Identity -user $User -erroraction Stop -server $_.OriginatingServer if ($permission -ne $null) { $permission | remove-PublicFolderClientPermission -identity $_.Identity -server $_.OriginatingServer } add-PublicFolderClientPermission -identity $_.Identity -user $user -AccessRights $Permissions -server $_.OriginatingServer; } wenn ich das richtig sehe müsste ja nur dieser Teil hier: if ($server) { $getpfcmd = "get-publicfolder -server $Server -identity $TopPublicFolder -Recurse -resultsize unlimited" } else { $getpfcmd = "get-publicfolder -identity $TopPublicFolder -Recurse -resultsize unlimited" } invoke-expression $getpfcmd | foreach { $permission = get-PublicFolderClientPermission -identity $_.Identity -user $User -erroraction Stop -server $_.OriginatingServer if ($permission -ne $null) { $permission | remove-PublicFolderClientPermission -identity $_.Identity -server $_.OriginatingServer } add-PublicFolderClientPermission -identity $_.Identity -user $user -AccessRights $Permissions -server $_.OriginatingServer; } geändert werden. Ich hab nur sowas von keine Zeit grade mich in die Powershell Programmierung reinzuarbeiten und sollte das Script recht dringend haben. Danke schonmal für alle die mir dabei helfen können. Gruß Enno P.S. bin ich damit hier eigentlich richtig? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SilentDemise Geschrieben 18. Juli 2012 Teilen Geschrieben 18. Juli 2012 deine kopie von oben sagt mir, auf dem server wird noch powershell v1 verwendet, ist das ein Server 2003? Habt ihr die Chance das zu updaten? ;-) Was genau meinst du mit Aufruf ohne alles? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 18. Juli 2012 Autor Teilen Geschrieben 18. Juli 2012 Nope, das is nen Windows 2008 Server mit Exchange 2007. Warum da Powershell v1 drauf ist?keine ahnung. wüsste nich mal wie ich da Powershell v?? drauf bekomme. Aufruf ohne alles = ich gebe dem Script keine weiteren Parameter von aussen mit. Ich brauche einfach nen script das die berechtigungen entfernt und dann neu setzt. da meine User es schaffen regelmässig Ordnerstrukturen anzulegen die völlig verbogene Berechtigungen haben, aber einfach nur die darunterliegenden erben sollten. War einfach meine Idee, ein so an die gewollten Berechtigungen angepasstes Script, das 1mal in der Woche oder so läuft und alles wieder gerade biegt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.