Skripte für das Erstellen und Anpassen von Freigaben nutzen Dateifreigaben in der PowerShell erstellen und verwalten
Anbieter zum Thema
In der PowerShell lassen sich Dateifreigaben erstellen und verwalten. Das ermöglicht die Einrichtung von Skripten für die Automatisierung oder das schnelle Erstellen und Konfigurieren von Freigaben mit einzelnen Cmdlets.

Dateifreigaben lassen sich relativ einfach in der PowerShell erstellen und verwalten. Dazu kommt das PowerShell-Modul „Smbshare“ zum Einsatz. Die einzelnen Cmdlets dieses Moduls lassen sich in der PowerShell zum Beispiel mit dem folgenden Befehl anzeigen:
Get-Command -modul SmbShare
Das Modul gehört zum Standardumfang der PowerShell und ist auch auf Rechnern mit Windows 10 und Windows 11 verfügbar. Auf Servern mit Windows Server 2019 und Windows Server 2022 sind die Cmdlets natürlich ebenfalls Bestandteil der PowerShell. Im Speichertipp „Ordner und Verzeichnisse mit Skripten erstellen“ geben wir einen Einblick in die Möglichkeiten von „New-SmbShare“, dem Cmdlet aus dem Modul „SmbShare“, mit dem sich neue Freigaben erstellen lassen. In diesem Zusammenhang sind auch die Tipps aus dem Beitrag „PowerShell-Cmdlets zum Reparieren von Freigaben, Volumes und Speichersubsystemen“ hilfreich.
Das Verbinden von Freigaben über die PowerShell
Wenn Freigaben erstellt sind, lassen sie sich als Netzlaufwerk verbinden. Wie das geht, zeigen wir im Beitrag „Netzlaufwerke mit der PowerShell verbinden und verwalten“.
Die bisher gezeigten Beispiele sind einfache Einstiege für das Erstellen von Freigaben. Es ist aber zudem möglich, komplexere Einstellungen zu setzen, zum Beispiel über eine Variable. Diese Variable kann mit dem Cmdlet „New-SmbShare“ zum Einsatz kommen, um die Freigaben schließlich zu erstellen. Dadurch lassen sich Freigabename, das Verzeichnis und die Berechtigungen in einer Variablen speichern, zum Beispiel mit:
$Parameters = @{
Name = "Software"
Path = "C:\Software"
FullAccess = "Dell\Administrator"
}
Pfade und Berechtigungen lassen sich natürlich beliebig anpassen. Mit der Eingabe von „$Parameters“ zeigt die PowerShell den Inhalt der Variablen an. Dieser lässt sich jetzt einfach an das Cmdlet „New-SmbShare“ übergeben:
New-SmbShare @Parameters
Die erstellten Freigaben und auch die in diesem Beispiel erstellte Freigabe „Software“ können mit dem Cmdlet „Get-SMbShare“ angezeigt werden. Die Konfiguration der Freigabe „Software“ wiederum funktioniert mit „Get-SmbShare "Software" | fl“.
Freigaben mit unterschiedlichen Rechten erstellen
Mit der oben gezeigten Möglichkeit, die einzelnen Daten der Freigabe in einer Variablen zu speichern, um dadurch auch gleich die Rechte für die Freigabe festzulegen, lassen sich noch erweitern. Ein Beispiel dazu ist:
$Parameters = @{
Name = "Software"
Path = "C:\Software"
ChangeAccess = "Dell\Users", "Dell\HR"
FullAccess = "Dell\Administrators"
}
New-SmbShare @Parameters
Auf diesem Weg lassen sich zahlreiche verschiedene Freigaben erstellen. Im Folgenden zeigen wir einige Beispiele dazu.
So können Freigaben in der PowerShell mithilfe des Cmdlets New-SmbShare erstellt werden:
Eine Freigabe für ein Verzeichnis erstellen:
New-SmbShare -Name "ShareName" -Path "C:\sharedfolder" -FullAccess "Everyone"
Eine Freigabe mit Lese-/Schreibzugriff für einen Benutzer erstellen:
New-SmbShare -Name "ShareName" -Path "C:\sharedfolder" -FullAccess "User1" -ReadAccess "User2"
Eine Freigabe mit Passwortschutz erstellen:
New-SmbShare -Name "ShareName" -Path "C:\sharedfolder" -FullAccess "User1" -ReadAccess "User2" -Password "SecurePassword"
Eine temporäre Freigabe erstellen, die nach Neustart des Computers gelöscht wird:
New-SmbShare -Name "ShareName" -Path "C:\sharedfolder" -FullAccess "Everyone" -Persistent
Die Freigabeberechtigungen unterscheiden sich von Berechtigungen auf dem Dateisystem und sollten gesondert behandelt werden. Um die Freigabeberechtigungen bereits beim Erstellen einer Freigabe auf Basis unterschiedlicher Benutzer oder Gruppen zu setzen, können neben den obigen Beispielen außerdem folgende Befehle zum Einsatz kommen:
Eine Freigabe mit einem Namen, einem Pfad und Berechtigungen, die in Variablen gespeichert sind:
$shareName = "ShareName"
$sharePath = "C:\sharedfolder"
$fullAccess = "User1"
$readAccess = "User2"
New-SmbShare -Name $shareName -Path $sharePath -FullAccess $fullAccess -ReadAccess $readAccess
Eine Freigabe mit einer Liste von Berechtigungen, die in einer Variablen gespeichert sind, erstellen:
$shareName = "ShareName"
$sharePath = "C:\sharedfolder"
$permissions = "User1", "User2"
New-SmbShare -Name $shareName -Path $sharePath -FullAccess $permissions[0] -ReadAccess $permissions[1]
Eine Freigabe mit einer Schleife erstellen, um mehrere Freigaben mit unterschiedlichen Namen und Pfaden zu erstellen:
$permissions = "User1", "User2"
$shareFolders = @(
@{Name = "ShareName1"; Path = "C:\sharedfolder1"},
@{Name = "ShareName2"; Path = "C:\sharedfolder2"}
)
foreach ($folder in $shareFolders) {
New-SmbShare -Name $folder.Name -Path $folder.Path -FullAccess $permissions[0] -ReadAccess $permissions[1]
}
Berechtigungen für Freigaben setzen
Die Berechtigungen für die Zugriffe auf die Freigaben werden mit „New-SmbShare“ und „Set-SmbShare“ gesetzt. Parallel dazu spielen auch die Berechtigungen auf Ebene des Dateisystems eine Rolle. Dazu kommen die Cmdlets des Moduls „NtfsSecurity“ zum Einsatz. Die zur Verfügung stehenden Cmdlets zeigt die PowerShell mit dem folgenden Befehl an:
Get-Command -modul NtfsSecurity
Installieren lässt sich das Modul mit:
Install-Module NTFSSecurity -Force #-AllowClobber
Danach steht das Modul zur Verfügung. Im Folgenden zeigen wir einige Beispielbefehle für die Verwendung:
NTFS-Berechtigungen für eine Datei oder einen Ordner hinzufügen:
$path = "C:\example"
$user = "User1"
Grant-NTFSAccess -Path $path -AccountName $user -AccessRights FullControl
NTFS-Berechtigungen für eine Datei oder einen Ordner entfernen:
$path = "C:\example"
$user = "User1"
Revoke-NTFSAccess -Path $path -AccountName $user
Überprüfen von NTFS-Berechtigungen für eine Datei oder einen Ordner:
$path = "C:\example"
Get-NTFSAccess -Path $path
Überschreiben der NTFS-Berechtigungen für eine Datei oder einen Ordner:
$path = "C:\example"
$user = "User1"
Set-NTFSAccess -Path $path -AccountName $user -AccessRights FullControl
SmbShare und NtfsSecurity miteinander kombinieren
Alle Beispiele der Module „SmbShare“ und „NtfsSecurity“ lassen sich miteinander kombinieren, um Freigaben zu erstellen, Berechtigungen für die Freigaben zu setzen und die Rechte parallel noch auf Ebene des Dateisystems für die einzelnen Verzeichnisse zu definieren. Beispiele dazu sind:
Eine Freigabe erstellen und Berechtigungen anhand einer Liste von Benutzern hinzufügen:
$shareName = "ShareName"
$sharePath = "C:\sharedfolder"
$permissions = "User1", "User2"
New-SmbShare -Name $shareName -Path $sharePath -FullAccess $permissions[0]
Grant-NTFSAccess -Path $sharePath -AccountName $permissions[1] -AccessRights ReadAndExecute
Überprüfen, ob eine Freigabe vorhanden ist, unter Umständen erstellen und Berechtigungen hinzufügen:
$shareName = "ShareName"
$sharePath = "C:\sharedfolder"
$permissions = "User1", "User2"
if (!(Get-SmbShare | Where-Object {$_.Name -eq $shareName})) {
New-SmbShare -Name $shareName -Path $sharePath -FullAccess $permissions[0]
}
Grant-NTFSAccess -Path $sharePath -AccountName $permissions[1] -AccessRights ReadAndExecute
Eine Liste von Freigaben erstellen, Berechtigungen hinzufügen und überprüfen:
$permissions = "User1", "User2"
$shareFolders = @(
@{Name = "ShareName1"; Path = "C:\sharedfolder1"},
@{Name = "ShareName2"; Path = "C:\sharedfolder2"}
)
foreach ($folder in $shareFolders) {
New-SmbShare -Name $folder.Name -Path $folder.Path -FullAccess $permissions[0]
Grant-NTFSAccess -Path $folder.Path -AccountName $permissions[1] -AccessRights ReadAndExecute
$ntfsPermissions = Get-NTFSAccess -Path $folder.Path
Write-Host "NTFS Permissions for $($folder.Name): $ntfsPermissions"
}
(ID:49265880)