Zum Inhalt springen

PowerShell: Neue Freigabe erstellen (SMB-Share, NTFS-Rechte)

Symbolbild Ordner

Eine neue Freigabe mit New-SmbShareAdvanced erstellen: Ordner erstellen, freigeben und NTFS-Rechte setzen in einem PowerShell-Befehl.

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
  • 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

5 × 3 =