none
Netzlaufwerk überprüfen RRS feed

  • Frage

  • Hallo,

    beiße mir gerade an folgendem Problem die Zähne aus:

    Wie überprüft man in PowerShell, ob ein Netzlaufwerk bereits (funktionsfähig) eingebunden ist?

    Habe bisher folgenden Code stehen:

    if((Test-Path -path Z:\) -ne $True)
    {
    	net use Z: \\Server\d$ /persistent:yes
    }
    else
    {
    	Write-Host "- Laufwerk Z bereits vorhanden"
    }

    Nur funktioniert die if-Abfrage nicht wie sie soll.
    Selbst wenn das Z-Laufwerk noch verbunden ist, wird versucht das Laufwerk neu zu mappen (net use).

    Hat jmd eine Idee, wie man dies sinnvoller abfragen könnte?

    Danke & Grüße

    Dienstag, 15. Mai 2012 14:57

Antworten

  • Ein simples prüfen mit Test-Path kann falsche Ergebnisse liefern. Wenn z.B. das Laufwerk ordentlich verbunden ist und aus irgendwelchen Gründen nicht antwortet oder der Zugriff verweigert wird.

    Denniver´s Ansatz ist da schon besser.

    Um etwas über den Zustand des Laufwerkes heraus zu finden kannst du die Propertys ConnectionState und Status verwenden.
    Win32_NetworkConnection
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394220%28v=vs.85%29.aspx

    Get-WmiObject Win32_Networkconnection | where {$_.LocalName -like 'Z:'}

    Du kannst für diesen Zweck auch zwei andere WMI Klassen benutzen.

    Win32_LogicalDisk
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173%28v=vs.85%29.aspx

    Die Klasse  Win32_MappedLogicalDisk
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394194%28v=vs.85%29.aspx
    macht es einfacher die Zugriffsrechte auszulesen. In dieser Klasse hast du auch das Property Availability

    Schau die die möglichkeiten der Klassen mal in ruhe an.


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Mittwoch, 16. Mai 2012 05:48
  • Also bei mir funktioniert dein Code einwandfrei.

     

    Grundsätzlich wärs vielleicht besser auf die vorhande Verbindung zu einem bestimmten Server zu überprüfen. Dein Code prüft ja nur ob irgendetwas auf Z: verbunden ist.

    Z.b. so:

    function FNMapDrive ($Path) {
        
        $netconn = @(Get-WmiObject Win32_Networkconnection | 
           Select-Object -ExpandProperty RemoteName)
    
        if ( $netconn -contains $Path) {
            "Netzverbindung zu $Path ist bereits vorhanden."
        } 
        else {
            net use Z: $Path
        }
    }
    
    FNMapDrive \\server\d$

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 15. Mai 2012 15:42
    Moderator

Alle Antworten

  • Also bei mir funktioniert dein Code einwandfrei.

     

    Grundsätzlich wärs vielleicht besser auf die vorhande Verbindung zu einem bestimmten Server zu überprüfen. Dein Code prüft ja nur ob irgendetwas auf Z: verbunden ist.

    Z.b. so:

    function FNMapDrive ($Path) {
        
        $netconn = @(Get-WmiObject Win32_Networkconnection | 
           Select-Object -ExpandProperty RemoteName)
    
        if ( $netconn -contains $Path) {
            "Netzverbindung zu $Path ist bereits vorhanden."
        } 
        else {
            net use Z: $Path
        }
    }
    
    FNMapDrive \\server\d$

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 15. Mai 2012 15:42
    Moderator
  • Ein simples prüfen mit Test-Path kann falsche Ergebnisse liefern. Wenn z.B. das Laufwerk ordentlich verbunden ist und aus irgendwelchen Gründen nicht antwortet oder der Zugriff verweigert wird.

    Denniver´s Ansatz ist da schon besser.

    Um etwas über den Zustand des Laufwerkes heraus zu finden kannst du die Propertys ConnectionState und Status verwenden.
    Win32_NetworkConnection
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394220%28v=vs.85%29.aspx

    Get-WmiObject Win32_Networkconnection | where {$_.LocalName -like 'Z:'}

    Du kannst für diesen Zweck auch zwei andere WMI Klassen benutzen.

    Win32_LogicalDisk
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173%28v=vs.85%29.aspx

    Die Klasse  Win32_MappedLogicalDisk
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa394194%28v=vs.85%29.aspx
    macht es einfacher die Zugriffsrechte auszulesen. In dieser Klasse hast du auch das Property Availability

    Schau die die möglichkeiten der Klassen mal in ruhe an.


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Mittwoch, 16. Mai 2012 05:48