Eine neue Freigabe mit New-SmbShareAdvanced erstellen: Ordner erstellen, freigeben und NTFS-Rechte setzen in einem PowerShell-Befehl.
Inhaltsverzeichnis
Was macht New-SmbShareAdvanced?
- Prüft ob der freizugebende Ordner existiert und erstellt ihn bei Bedarf
- Prüft ob der angeforderte Freigabename bereits verwendet wurde
- Ja: Prüft ob der selbe Pfad verwendet wurde
- Ja: Script fortsetzen, keine Freigabe erstellen
- Nein: Script abbrechen („already exists with other path“)
- Nein: Erstellt die Freigabe mit Freigabeberechtigung „Jeder“: Vollzugriff
- Ja: Prüft ob der selbe Pfad verwendet wurde
- Setzt gewünschte NTFS-Rechte
Auch wenn das Script mehrere Freigaben je Ordner ermöglicht, sollte man in der Praxis nur eine Freigabe je Ordner erstellen.
Neue Freigabe mit New-SmbShareAdvanced erstellen
New-SmbShareAdvanced benötigt folgende Parameter:
- Path: Ordner der freigegeben werden soll
- FileShareName: Freigabename
- PermissionedUserOrGroup: Zugriff erlaubt für Benutzer oder Gruppe
- Access: Read (nur lesend) oder Write (lesend/schreibend)
Beispiel:
New-SmbShareAdvanced -Path C:\test -FileShareName "test$" -PermissionedUserOrGroup user@domain.at -Access Write -Verbose
Die Funktion „New-SmbShareAdvanced“
function New-SmbShareAdvanced {
param(
[parameter (Mandatory=$true, position=1, ParameterSetName='SearchLoc')]
[string]$Path,
[parameter (Mandatory=$true, position=2, ParameterSetName='SearchLoc')]
[string]$FileShareName,
[parameter (Mandatory=$true, position=3, ParameterSetName='SearchLoc')]
[string]$PermissionedUserOrGroup,
[parameter (Mandatory=$true, position=4, ParameterSetName='SearchLoc')]
[ValidateSet("Read", "Write")]
[string]$Access
)
# Write-Verbose parameters
Write-Verbose "===================================================================="
Write-Verbose "Path: $Path"
Write-Verbose "FileShareName: $FileShareName"
Write-Verbose "PermissionedUserOrGroup: $PermissionedUserOrGroup"
Write-Verbose "Access: $Access"
Write-Verbose "--------------------------------------------------------------------"
# create directory, if necessary
if(Test-Path $Path){
Write-Verbose -Message "$Path already exists!"
} else {
if(New-Item $Path -ItemType Directory){
Write-Verbose -Message "$Path created!"
} else {
Write-Error -Message "Error: Cannot create directory $Path!" -ErrorAction Stop
}
}
# get all existing smbshares
$smbShares = Get-SmbShare | Sort-Object Name
# search for requested fileshare name
$requestedShare = $smbShares | Where-Object Name -eq $FileShareName
# fileshare
if($requestedShare.Name -eq $FileShareName){
# fileshare exists, check path
if($requestedShare.Path -eq $Path){
Write-Verbose -Message "Fileshare already exists!"
} else {
Write-Error -Message "Error: $FileShareName already exists with other path!" -ErrorAction Stop
}
} else {
# fileshare not exists, create share
if(New-SmbShare -Path $Path -Name $FileShareName -FullAccess jeder -EncryptData $true){
Write-Verbose -Message "$FileShareName created!"
} else {
Write-Error -Message "Error: Cannot create fileshare $FileShareName!" -ErrorAction Stop
}
}
# set NTFS permissions
Write-Verbose -Message "Set NTFS permissions for $FileShareName ($Path)"
if($Access -eq "Write"){
$grant = "M"
} else {
$grant = "RX"
}
$icaclsGrant = $PermissionedUserOrGroup+":(OI)(CI)($grant)"
icacls $Path /grant $icaclsGrant
}
# Beispiel-Aufruf
New-SmbShareAdvanced -Path C:\test -FileShareName "test$" -PermissionedUserOrGroup "Gruppe" -Access Write -Verbose
Code-Sprache: PHP (php)
Quelle: New-SmbShare