2012-03-29 14 views
0

コード(下)は、2つの異なるディレクトリが存在するかどうかを確認しようとしているpowershellスクリプトからのものです。ディレクトリが存在する場合、その下にあるすべてのファイルとフォルダを削除するためにremove-itemを実行するはずです。powershellスクリプト内のテストパス

私は、スクリプトを実行したときしかし、私は次のような出力が得られます。

何場合:実行操作対象の "ファイルの削除" "\ SERVER1 \ C $ \ WINDOWS \ propatches \パッチ\ます。WindowsServer2003-KB2621440.exe" 。

次の場合:ターゲット "\ server1 \ c $ \ windows \ propatches \ patches \ WindowsServer2003-KB2641653.exe"で "ファイルの削除"を実行するとどうなりますか?

Remove-Item:指定されたパス\ server1 \ c $ \ winnt \ propatches \ patchesにあるオブジェクトは存在しません。 Cで :\ DocumentsとSettings \のLogonUser \デスクトップ\ GetPCNames.ps1:32文字:14 +削除-項目< < < < $ + CategoryInfo -whatif clearpathの-recurse:ObjectNotFound:(\ SEARCHMGT1 \ C $ \ WINNT \ propatches \パッチ:文字列)は、IOException [-商品の削除] + FullyQualifiedErrorId:ItemDoesNotExist、Microsoft.PowerShell.Commands.RemoveItemCommand

それはディレクトリが存在し、削除項目ことを検出された最初のテストパスのように思えます正しく実行されます。

しかし、2番目のテストパス(存在しない)は引き続きremove-itemコマンドを実行しようとしますが、これはパスが存在しないためです。

私のテストパスは、文が間違っていなければならないと仮定していますが、私が間違っていることを理解しようとしているときに私の髪を引き出しています。なぜこれがエラーを生成しているのか誰もが知っていますか?

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

ありがとうございました!私はスクリプトをあまりにも凝視していたと思う。私はそれを完全に見落とした! – Brad

答えて

2

誤植..

Test-Path -path $path1 

あなたはディレクトリのみPathTypeパラメータを使用するためにテストしたい場合は、安全のために、また

Test-Path -path $path2 
+0

変数名をこの関数の引用符なしで展開することはできません。 Test-Path -Path \\ "$ server" \ "$ filePath" – Tequila

1

次のようになります。

Test-Path $path1 -PathType Container 
関連する問題