none
net use Fehler abfangen RRS feed

  • Frage

  • Hallo,

    ich nutze in einer if/else Abfrage net use zum Mounten eines Laufwerks. Sobald das Mounten nicht klappt weil z.B. der Server nicht erreichbar ist bricht das Script mit folgender Meldung ab

    Net : Systemfehler 53 aufgetreten.
    In C:\Unbenannt2.ps1:19 Zeichen:5
    +     Net Use Z: $Path
    +     ~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (Systemfehler 53 aufgetreten.:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
     
    Der Netzwerkpfad wurde nicht gefunden

    Da ich aber keinen Abbruch sondern ein weiterfortführen des Script erzwingen möchte würde ich die Fehlermeldung gerne abfangen und das Script soll dann zu nächsten Zeile/Abfrage springen. Ich habe es schon mit -ErrorAction in allen Kombinationen versucht aber ich denke -ErrorAction ist in Zusammenhang mit net use nicht geeignet. Habt ihr da eine Lösung/Lösungsvorschlag?

    Sonntag, 15. März 2015 17:06

Antworten

Alle Antworten

  • Nur mal aus der Hüfte geschossen:

    Wenn schon Powershell, wieso dann nicht auch die entsprechenden cmdlets dafür nutzen? In deinem Fall wäre das dann "New-PSDrive" .

    Hier mal ein Beispiel für das Errorhandling: https://social.technet.microsoft.com/Forums/scriptcenter/en-US/29cb5cb5-1ef8-4550-b6d3-c7029f022155/checking-errors-with-newpsdrive?forum=winserverpowershell

    Ansonsten kannst du auch noch drüber nachdenken wenn die Infrastruktur vorhanden ist, die Netzlaufwerke per GPP zu mappen: http://www.windowspro.de/wolfgang-sommergut/netzlaufwerke-verbinden-group-policy-preferences


    freundliche Grüße Thomas


    Sonntag, 15. März 2015 21:21
  • Hallo Krümmelmonster,

    du kannst auch die Verbindung vorher testen

    Test-Connection -ComputerName "SERVERNAME"


    Gruß Toni

    Montag, 16. März 2015 09:24
  • Auch wenn ich Thomas grundsätzlich zustimme, du kannst das auch mit net use machen:

     

    $ErrorActionPreference = "SilentlyContinue"
    
    $Error.Clear()
    net use g: \\target\share
    if ($Error) { Write-Host  "Fehler ist aufgetreten: $Error"}
     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 17. März 2015 11:34
    Moderator
  • Oder mit dem guten alten Windows Script Host. Finde ich für diesen Fall charmanter als "%SystemRoot%\System32\net.exe use" aufzurufen. Und ein Mapping als PSDrive ist eben nicht exakt das selbe, weil das gemappte Laufwerk nur in einer PowerShell-Session zur Verfügung steht.

    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true,Position=0)]
        [string]$ServerName,
    
        [Parameter(Mandatory=$true,Position=1)]
        [string]$ShareName,
    
        [Parameter(Mandatory=$false,Position=2)]
        [ValidatePattern('^[a-zA-Z*]$')]
        [string]$DriveLetter = '*',
    
        [Parameter(Mandatory=$false)]
        [bool]$Persistent = $false
    )
    
    $ExitCode = 0
    
    $ErrorActionPreference = 'SilentlyContinue'
    $WshNetwork = New-Object -ComObject 'WScript.Network'
    $WshNetwork.MapNetworkDrive("$($DriveLetter):", "\\$ServerName\$ShareName", $Persistent)
    if (-not $?) {$ExitCode = 1}
    
    $ErrorActionPreference = 'Continue'
    # [...]
    
    exit $ExitCode
    


    Gruß
    Joachim

     
    Donnerstag, 2. April 2015 11:50