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
}
}
}
}
####################################################################################