einfache Version:

WorkwithaFolder.ps1
###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:

WorkwithFolders2.ps1
###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
            }
 
           }
       }
}        
####################################################################################