Tags: Dateisystem, Netzwerk, PowerShell
Wenn man File Shares einen Laufwerksbuchstaben via Kommandozeile zuordnen möchte, dann kann man statt net.exe auch PowerShell verwenden. Die Cmdlets des Moduls SmbShare können freigegebene Ordner anzeigen, verbinden und wieder trennen. PowerShell unterstützt dabei auch neuere SMB-Features wie QUIC und Compression.
Das Verbinden mit einem Netzlaufwerk umfasst in der Regel folgende Schritte:
- Freigegebene Ordner auf dem Remote-Rechner anzeigen
- Prüfen, welche Berechtigungen für die fraglichen Shares bestehen
- Vorhandene Laufwerke auflisten, um freie Kennungen zu ermitteln
- File Share einer Laufwerkskennung zuordnen
- Mapping wieder entfernen, wenn es nicht mehr benötigt wird.
Shares auf einem Remote-Server auflisten
Um zu sehen, welche Freigaben ein File-Server anbietet, ruft man das Cmdlet Get-SmbShare auf. Verwendet man es ohne Parameter, dann zeigt es nur die File Shares des lokalen Rechners.
Möchte man die Freigaben eines Remote-Servers ausgeben, dann unterstützt es allerdings den Parameter ComputerName nicht. Man muss hier den Umweg über eine CIM-Session nehmen:
$cim = New-CimSession -ComputerName server1 -Credential user@contoso.com
Get-SmbShare -CimSession $cim
Die Ausgabe enthält neben den benutzerspezifischen Freigaben standardmäßig auch die administrativen Shares wie c$ oder ADMIN$. Dies kann man mit dem Parameter Special unterbinden.
Get-SmbShare -Special $false
Alternativ steht für diesen Zweck Get-FileShare zur Verfügung. Es kann nicht nur SMB-, sondern auch NFS-Freigaben erfassen:
Get-FileShare -CimSession $cim -Protocol NFS
Share-Berechtigungen abfragen
Bevor man eine Verbindung herstellt, ist es noch interessant zu wissen, welche Berechtigungen für ein Share konfiguriert sind:
Get-SmbShareAccess -Name PubDocs -CimSession $cim
Dieses Beispiel fragt den Remote-Server, zu dem wir weiter oben eine CIM-Session aufgebaut haben, nach den Zugriffsrechten für eine Freigabe mit dem Namen PubDocs.
Aktuelle Mappings anzeigen
Wenn man im ersten Schritt sehen möchte, welche Mappings für Netzlaufwerke bereits existieren, dann ruft man Get-SmbMapping ohne Parameter auf. Alternativ kann man einen Laufwerksbuchstaben angeben, um zu erfahren, mit welchem Share er verknüpft ist:
Get-SmbMapping u:
Das Ganze funktioniert auch umgekehrt, indem man mit RemotePath die Freigabe spezifiziert und so den lokalen Laufwerksbuchstaben erhält.
Laufwerksbuchstaben zuordnen
Das Cmdlet New-SmbMapping teilt einem Share eine Laufwerkskennung zu. Es erwartet die Angabe des lokalen Pfads und jenen der Freigabe.
Zusätzlich kann man dem Aufruf den Benutzernamen und das Passwort mitgeben. Dies erfolgt nicht wie sonst üblich mit einem Credentials-Objekt, sondern im Klartext:
New-SmbMapping -LocalPath x: -RemotePath \\ds\share1 `
-user contoso\acon -password P@ssw0rd -SaveCredentials
Wenn man die Anmeldedaten bei der Herstellung eines weiteren Mappings nicht erneut eingeben möchte, dann kann man sie mit dem zusätzlichen Schalter SaveCredentials speichern.
Der Schalter Persistent sorgt dafür, dass die Laufwerkszuordnung über die aktuelle Sitzung hinaus erhalten bleibt.
Mit der Unterstützung für QUIC und Komprimierung des Netzwerk-Traffics führte Microsoft zuletzt zwei interessante SMB-Features ein. Beide lassen sich mit PowerShell aktivieren:
New-SmbMapping -LocalPath x: -RemotePath \\ds\share1 -TransportType QUIC
New-SmbMapping -LocalPath x: -RemotePath \\ds\share1 -CompressData $true
QUIC setzt auf dem Server die Azure Edition voraus.
Mapping remote erstellen
Theoretisch kann man diese Operation so auch auf einem Remote-Rechner ausführen:
$cim = New-CimSession -ComputerName Server1 -Credential user@contoso.com
New-SmbMapping -LocalPath u: -RemotePath \\Server2\PubDocs `
-CimSession $cim -UserName contoso\user -Password Gehe1m
In diesem Fall richtet man auf Server1 ein Mapping für eine Freigabe ein, die auf Server2 liegt. In der Praxis zeigt Get-SmbMapping dann für diese Zuordnung wahrscheinlich den Status Unavailable. Der Grund sind mangelnde Berechtigungen wegen des Second-Hop-Problems.
Anstatt CredSSP zu konfigurieren, kann man mit Enter-PSSession einfach eine interaktive Remote-Session zu Server1 öffnen und New-SmbMapping darin ausführen.
Mapping löschen
Das Trennen einer Laufwerkszuordnung geschieht schließlich mit Hilfe von Remove-SmbMapping. Dem Cmdlet reicht die Angabe des lokalen oder des entfernten Pfades.
Zusätzlich kann man durch Verwendung von UpdateProfile dafür sorgen, dass Windows das Laufwerk nach der nächsten Anmeldung nicht erneut zuordnet, sondern dieses permanent löscht:
Remove-SmbMapping x: -UpdateProfile
Zusammenfassung
PowerShell bietet die nötigen Cmdlets, um die vorhandenen Freigaben eines Servers und deren Berechtigungen anzuzeigen. Mit New-SmbMapping ordnet man sie einem lokalen Laufwerksbuchstaben zu.
Etwas umständlich ist die Remote-Nutzung, weil die Cmdlets den Parameter ComputerName nicht unterstützen und man daher mit CIM-Sessions hantieren muss.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links