einfache Version:
###Erstellung eines Benutzer-Verzeichnises / rb / 2020 # erforderliche Provisioning-Parameter der Resource: # $username # wird immer von Tenfold mitgeliefert # $NTDomain # NT-Domänenname # $Path # Name der Dateifreigabe z.B. "\\server\share" # erforderliche Resourcenbedingungen: # "Resource - New" # "Resource - Delete" ############################################################## $userName = $params.request.person.masterdata.userName $NTDomain = $params.ntdomain $Path = $params.path $userPath= "$Path\$userName" ###Verzeichnis erstellen... If ((Test-Path $Path)){ If (!( Test-Path $userPath)){ #echo "Verzeichnis $userPath existiert nicht, versuche zu erstellen ..." try {((New-Item (join-path -path $Path -ChildPath $userName) -ItemType directory ))} catch { return "error: Verzeichnis $userPath konnte nicht angelegt werden";exit; } #write-host "Verzeichnis $userPath erstellt." } } else{ try { Remove-Item -Recurse -Force $userPath; return "Verzeichnis $userPath gelöscht.";exit; } catch { return "error: $userPath exist, but cannot delete"; exit; } } } ###write-host "versuche Verzeichnisrechte an $Path zu ändern ..." $acl = Get-Acl $userPath $permission = "$Username","FullControl","ContainerInherit,ObjectInherit","None","Allow" $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission $ID = New-object System.Security.Principal.NTAccount($NTDomain,$userName) try {$acl.SetAccessRule($accessRule) } catch {return "error: set-accessrule $accessrule failed";exit; } try {$acl.SetOwner($ID) } catch {return "error: set-owner $sid failed";exit; } try {$acl | Set-Acl $userPath } catch {return "error: set-acl $userpath failed" }
flexiblere Version für verschiedene Domänen oder Verzeichnisse:
###Erstellung eines Benutzer-Verzeichnises / js / 2020 # erforderliche Provisioning-Parameter der Resource: # $username # wird immer von Tenfold mitgeliefert # $NTDomain # NT-Domänenname # $Server # Server auf dem das Skript laufen soll (einmalig winrm quickconfig ausführen) # $Path # Name der Dateifreigabe z.B. "\\server\share" # erforderliche Resourcenbedingungen: # "Resource - New" # "Resource - Delete" ############################################################## # return 0; $userName = $params.request.person.masterdata.userName $rti = $params.request.type.id $NTDomain = $params.ntdomain $Path = $params.path $server = $params.server $userpath = "$path\$username" $port = 5985 ##### Check connections ############################################################ if (-not (Test-NetConnection -ComputerName $server -Port $port )){ throw "error: Server $server an Port $port nicht erreichbar!" } #################################################################################### else{ Invoke-Command -ComputerName $server -Credential $cred -ConfigurationName homedir -ScriptBlock { #SessionRegistrierung auf dem Server einmalig ausführen #Register-PSSessionConfiguration -Name homedir -RunAsCredential 'ntdom\myuser' -force If ((Test-Path $using:path)){ ### Verzeichnis erstellen... If ((!( Test-Path $using:userPath)) -and ( $using:rti -eq 1)) { New-Item $using:userPath -ItemType directory $acl = Get-Acl $using:userPath $permission = "$using:Username","FullControl","ContainerInherit,ObjectInherit","None","Allow" $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission $ID = New-object System.Security.Principal.NTAccount($using:NTDomain,$using:userName) $acl.SetAccessRule($accessRule) $acl.SetOwner($ID) $acl | Set-Acl $using:userPath } ###Verzeichnis löschen... If (( Test-Path $using:userPath ) -and ( $using:rti -eq 3) ) { Remove-Item -Recurse -Force $using:userPath -ErrorAction SilentlyContinue } } } } ####################################################################################