Netzlaufwerke verbinden mit Powershell und net use

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.

2 Kommentare

Bild von Snowy White
Snowy White (Besucher) sagt:

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

Bild von Snowy White
Snowy White (Besucher) sagt:

Ich bins nochmal, das Script läuft nun auch bei mir, es lag an einer Profil-Einstellung von Powershell auf meinem Rechner.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht angezeigt. Wenn mit Ihrer angegebenen Mail-Adresse ein Gravatar verknüpft ist, dann wird dieser neben Ihrem Kommentar eingeblendet.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Zeilen und Absätze werden automatisch erzeugt.
  • Mail-Adressen werden im Seitenquelltext unkenntlich gemacht, um sie vor dem automatischen Erfassen durch Spammer zu schützen.

Weitere Informationen über Formatierungsoptionen