none
Fehler bei Test-Path? RRS feed

  • Frage

  • $mPath = "B:\Ordner\" + $VariableMitUnterOrdner;
    $checkPathFlag = Test-Path $mPath -PathType Container;
            
    if($checkPathFlag -eq "true") {
         Write-Host "test";
    }
    

    B ist ein Netzlaufwerk (Um genau zu sein, ein Cloudspeicher, welcher via WebDav verbunden ist). Da ich via PowerShell Dateien dorthin verschieben kann, sollte das nicht das Problem sein.

    Leider gibt er immer false aus, obwohl der Pfad existiert...

    Mache ich etwas falsch?

    Danke!

    Freitag, 10. März 2017 10:40

Antworten

  • Da ich mich mit WebDav auch nicht auskenne, kann ich zum eigentlichen Problem nicht viel beitragen. Als Tipp zum Debuggen würde ich aber dringend empfehlen, nicht so viel Code um das Problem herumzuschreiben. Versuch einfach mal
    Test-Path "DeinVollständigerPfad"
    Wenn dein Pfad existiert, musst du true als Ergebnis bekommen. Wenn das nicht passiert, hast du offensichtlich ein Problem.
    Freitag, 10. März 2017 13:15
  •  

    Test-Path hat teilweise Probleme auf nichtlokalen Laufwerken. Obwohl es grundsätzlich geht, ist es meiner Ansicht nach manchmal schlicht ein Timingproblem, d.h. das Test-Path aufgibt, bevor z.b. eine "schlafende" Verbindung reaktiviert wurde.
    Du kannst den Zugriff aber auch mit einer einfachen Funktion prüfen, die ein Testfile auf dem zu testenden Pfad erstellt und wieder löscht.
    Eine einfache Variante wäre:

    Function FnTestPath ($testpfad) {
    	$Error.Clear()
    	if ( New-Item "$testpfad\testfile.txt" -Type File -erroraction silentlycontinue) { 
    		Remove-Item "$testpfad\testfile.txt"
    		return $true 
      	}
    	else {  
    		return $false 
    	}
    }
    
    
     
    Grüße, Denniver
     




    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    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.

    Freitag, 10. März 2017 14:11
    Moderator
  • Was die Erklärung für das Problem betrifft, das liegt daran, das als normaler Nutzer verbundene Laufwerke nicht als Admin zu Verfügung stehen und umgekehrt. Eine kurze Erklärung warum das so ist gibts z.b hier.

     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    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.

    Freitag, 10. März 2017 14:27
    Moderator
  • > Das was ich geschrieben habe, funktioniert. Doch ich hatte die ISE als Administrator gestartet. Wenn ich diese normal ausführe (der User hat auch Administrationsrechte), funktioniert es.
     
    EnableLinkedConnections :-)
     
    Freitag, 10. März 2017 14:43
  • Das was ich geschrieben habe, funktioniert. Doch ich hatte die ISE als Administrator gestartet. Wenn ich diese normal ausführe (der User hat auch Administrationsrechte), funktioniert es.

    Dafür wäre eine Erklärung interessant!

    Danke für die Tipps!

    Freitag, 10. März 2017 14:04

Alle Antworten

  • Der reine Powershell-Weg wäre sowas wie das hier:

    $mPath = Join-Path -Path  'B:\Ordner' -ChildPath $VariableMitUnterOrdner
    if(Test-Path $mPath -PathType Container) {
         Write-Host "test"
    }

    ... aber WebDav ist wohl nicht immer ganz problemfrei ... hab leider keine eigenen Erfahrungen in der Richtung. 


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Freitag, 10. März 2017 11:01
  • Da ich mich mit WebDav auch nicht auskenne, kann ich zum eigentlichen Problem nicht viel beitragen. Als Tipp zum Debuggen würde ich aber dringend empfehlen, nicht so viel Code um das Problem herumzuschreiben. Versuch einfach mal
    Test-Path "DeinVollständigerPfad"
    Wenn dein Pfad existiert, musst du true als Ergebnis bekommen. Wenn das nicht passiert, hast du offensichtlich ein Problem.
    Freitag, 10. März 2017 13:15
  • Das was ich geschrieben habe, funktioniert. Doch ich hatte die ISE als Administrator gestartet. Wenn ich diese normal ausführe (der User hat auch Administrationsrechte), funktioniert es.

    Dafür wäre eine Erklärung interessant!

    Danke für die Tipps!

    Freitag, 10. März 2017 14:04
  •  

    Test-Path hat teilweise Probleme auf nichtlokalen Laufwerken. Obwohl es grundsätzlich geht, ist es meiner Ansicht nach manchmal schlicht ein Timingproblem, d.h. das Test-Path aufgibt, bevor z.b. eine "schlafende" Verbindung reaktiviert wurde.
    Du kannst den Zugriff aber auch mit einer einfachen Funktion prüfen, die ein Testfile auf dem zu testenden Pfad erstellt und wieder löscht.
    Eine einfache Variante wäre:

    Function FnTestPath ($testpfad) {
    	$Error.Clear()
    	if ( New-Item "$testpfad\testfile.txt" -Type File -erroraction silentlycontinue) { 
    		Remove-Item "$testpfad\testfile.txt"
    		return $true 
      	}
    	else {  
    		return $false 
    	}
    }
    
    
     
    Grüße, Denniver
     




    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    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.

    Freitag, 10. März 2017 14:11
    Moderator
  • Lies bitte mal hier für die Zukunft. Danke!

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    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.

    Freitag, 10. März 2017 14:12
    Moderator
  • Was die Erklärung für das Problem betrifft, das liegt daran, das als normaler Nutzer verbundene Laufwerke nicht als Admin zu Verfügung stehen und umgekehrt. Eine kurze Erklärung warum das so ist gibts z.b hier.

     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    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.

    Freitag, 10. März 2017 14:27
    Moderator
  • > Das was ich geschrieben habe, funktioniert. Doch ich hatte die ISE als Administrator gestartet. Wenn ich diese normal ausführe (der User hat auch Administrationsrechte), funktioniert es.
     
    EnableLinkedConnections :-)
     
    Freitag, 10. März 2017 14:43