2012-03-29 12 views
0

Der Code (unten) stammt aus einem Powershell-Skript, wo ich versuche, nach der Existenz von zwei verschiedenen Verzeichnissen zu suchen. Wenn das Verzeichnis existiert, soll es ein Remove-Item machen, um alle darunter liegenden Dateien und Ordner zu löschen.Test-Pfad in Powershell-Skript

Allerdings, wenn ich das Skript ausführen ich folgende Ausgabe:

Was: Der Vorgang "Datei entfernen" für das Ziel "\ server1 \ c \ windows $ \ propatches \ Patches \ WindowsServer2003-KB2621440.exe" .

Was ist, wenn: Operation "Remove File" auf Ziel "\ server1 \ c $ \ windows \ propatches \ patches \ WindowsServer2003-KB2641653.exe".

Remove-Item: Ein Objekt im angegebenen Pfad \ server1 \ c $ \ winnt \ propatches \ patches existiert nicht. unter C: \ Dokumente und Einstellungen \ Logonuser \ Desktop \ GetPCNames.ps1: 32 Zeichen: 14 + Remove-Item < < < < $ ClearPath -recurse -whatif + CategoryInfo: ObjectNotFound: (\ SEARCHMGT1 \ c $ \ winnt \ propatches \ Patches: String) [Remove-Item], IOException + FullyQualifiedErrorId: ItemDoesNotExist, Microsoft.PowerShell.Commands.RemoveItemCommand

Es scheint, wie der erste Test-Pfad erkennt, dass das Verzeichnis vorhanden ist und das entfernen-Artikel läuft richtig.

Allerdings versucht der zweite Testpfad (der nicht existiert) immer noch den Befehl remove-item auszuführen, der ausfällt, weil der Pfad nicht existiert.

Ich nehme meinen Testpfad an, wenn Aussage falsch sein muss, aber ich ziehe meine Haare aus und versuche herauszufinden, was ich falsch mache. Hat jemand eine Idee, warum dies zu Fehlern führt?

foreach ($objResult in $colResults) 
{ 
$objComputer = $objResult.Properties; 

$path1 = "\\" + $objComputer.name + "\c$\windows\propatches\patches\" 
$path2 = "\\" + $objComputer.name + "\c$\winnt\propatches\patches\" 

#check to see if it is missing 
if ((Test-Path -path $path1)) 
{ 
    $clearpath = $path1 + "*" 
    Remove-Item $clearpath -recurse -whatif 
} 

#check to see if it is missing 
if ((Test-Path -path $path1)) 
{ 
    $clearpath = $path2 + "*" 
    Remove-Item $clearpath -recurse -whatif 
} 
+0

Vielen Dank! Ich schätze, ich habe das Skript zu lange angeguckt. Das habe ich komplett übersehen! – Brad

Antwort

2

Typo ..

Test-Path -path $path1 

sollte

Test-Path -path $path2 
+0

Variablennamen können für diese Funktion nicht ohne Anführungszeichen erweitert werden. Testpfad -Pfad \\ "$ server" \ "$ filePath" – Tequila

1

Auch sein, um auf der sicheren Seite zu sein, wenn Sie für Verzeichnisse testen wollen nur den PathType Parameter verwenden:

Test-Path $path1 -PathType Container