Netzlaufwerke verbinden mit Powershell und net use


    Tags: , ,

    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

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Peter Monadjemi

    Peter Monadjemi lebt als freier IT-Journalist, Buchautor und Trainer mit Schwerpunkten PowerShell und .NET-Programmierung in Esslingen am Neckar.
     

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