Tags: Netzwerk, PowerShell, Dateisystem
Für das Verbinden eines Netzwerklaufwerks mit einer Freigabe hat die PowerShell nichts zu bieten. Da dies aber eine wichtige Aufgabe von Login-Skripts ist, muss es natürlich auch dafür eine PowerShell-Lösung geben.
Die gibt es gleich in zwei Varianten: Über den Aufruf von Net Use und über ein COM-Objekt des Windows Scripting Host (WSH), der seit vielen Windows-Versionen "fest eingebaut" ist. Im Folgenden wird die Variante mit Net Use vorgestellt, da sie etwas "natürlicher" ist und ein bereits vorhandener Stapelbefehl unverändert übernommen werden kann.
Auch wenn Net Use direkt aufgerufen werden kann, ein wenig komfortabler geht es mit dem Start-Process-Cmdlet, da sich hier z.B. Fehlermeldungen in eine Datei umleiten lassen.
Die folgende Funktion erwartet Laufwerksname, Freigabename und ein PSCredential-Objekt für die Anmeldung als Parameter und verbindet die Freigabe mit dem übergebenenLaufwerksbuchstaben.
<#
.Synopsis
Laufwerksbuchstabe mit einer Freigabe verbinden
#>
function Connect-Share
{
param([String]$DriveName,[String]$ShareName,[Object]$Credential)
# Wurde ein PSCrendential-Object übergeben?
if ($Credential -is [System.Management.Automation.PSCredential])
{
$Cred = [System.Management.Automation.PSCredential]$Credential
}
else
{
$Cred = Get-Credential -Credential $Credential
}
$Password = $Cred.GetNetworkCredential().Password
$UserName = $Cred.UserName.Substring(1) # ohne das \-Zeichen
del CmdError.txt -ErrorAction SilentlyContinue
$P = Start-Process -Filepath cmd -NoNewWindow -Wait -RedirectStandardError CmdError.txt `
-ArgumentList "/c net use $DriveName $ShareName $Password /user:$UserName" `
-PassThru
if ($P.ExitCode -eq 0)
{ "Freigabe $ShareName wurde mit Laufewerk $DriveName verbunden." }
else
{ "Fehler: Freigabe $ShareName konnte nicht verbunden werden. $(Get-Content CmdError.txt)" }
}
Auch Funktionen sollen die Namenskovention Verb-Hauptwort einhalten. Um die Funktion trotzdem etwas einfacher eingeben zu können, wird ein Alias definiert:
New-Alias -Name NetUse -Value Connect-Share
Der Aufruf sieht wie folgt aus:
NetUse -DriveName P: -ShareName \\PMServer\PsKurs -Credential Administrator
Da für den Credential-Parameter bei diesem Aufruf ein String übergeben wird, wird das Kennwort bei der Ausführung der Funktion abgefragt. Alternativ kann ein Objekt vom Typ PSCredential übergeben werden, das zuvor über Get-Credential geholt wurde.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links
3 Kommentare
Hallo,
wenn ich dieses Script kopiere und in der Powershell ausprobiere, kommt nichts weiter, weder eine Fehlermeldung noch eine erfolgreiche Verbindung. Zuvor hatte ich noch die Variablen für
user
DriveName
ShareName
definiert. Aber es kommt nichts. Wenn ich stattdessen einfach
net use I: $ShareName /user:$user $password /persistent:no
eingebe, funktioniert es bzw. ich erhalte zumindest eine Fehlermeldung.
Was kann ich tun, damit das Script oben funktioniert? Btw: Eine Version ohne Credentials würde mich interessieren (also wo man Benuter/User manuell eingibt)
Cheerio
Snowy
Ich bins nochmal, das Script läuft nun auch bei mir, es lag an einer Profil-Einstellung von Powershell auf meinem Rechner.
Ich möchte nochmal auf den ausgezeichneten Artikel auf der gleichen Homepage verweisen...
http://www.windowspro.de/wolfgang-sommergut/netzlaufwerke-verbinden-grou...