0

仮想サーバーのごみ箱からすべてのコンテンツを削除するPowershellスクリプトを作成します。何らかの理由で、Windows 2003のごみ箱のパスを見つける際にエラーが発生し、その中のすべてを削除するためにごみ箱を見つけることができません。ここの誰かが私がこのコードスニペットで間違っていることについてアドバイスをくれるかどうか疑問に思っていました:

if($serverVersion.name -like '*2003*'){
$dir = "\\$server" + '\C$\recycled'
}
elseif($serverVersion.name -like '*2008*'){
$dir = "\\$server" + '\C$\$recycle.bin'
}

$recycleArray = @()
foreach ($item in get-childitem -path $dir){
    $recycleArray += $item
}

for ($i = 0; $i -le $recycleArray.length; $i++){
    $removal = $dir + "\" + $recycleArray[$i]
    remove-item $removal -force -recurse 
    }

W2K8のごみ箱からすべてを正しく削除できるので、ごみ箱へのパスが見つかったら、コードは正しく機能するはずです。これは、見たいと思っている人のために私が受け取るエラーメッセージの写真です。

ここに画像の説明を入力してください

また、好奇心から、このコードをすべて削減し、2003年と2008年の両方で2つのワンライナーを作成する方法はありますか?私がこれを書いた現在の方法は、Powershellのコマンドレットを利用していないことを認識しており、W2K3ごみ箱の何が問題になっているのかを理解したら、それを改善したいと考えています。

4

2 に答える 2

2

問題は、ごみ箱がWindows Server 2003のこの場所にあることです。c:\ recyclerではなくc:\ recycledであるため、コードを変更すれば機能するはずです。

このコードを試して、問題が解決するかどうかを確認してください

if($serverVersion.name -like '*2003*'){
$dir = "\\$server" + '\C$\recycled'
}
elseif($serverVersion.name -like '*2008*'){
$dir = "\\$server" + '\C$\$recycle.bin'
}


foreach ($item in get-childitem -path $dir){
     remove-item $item.FullName -Force -Recurse
}
于 2012-07-27T15:24:36.523 に答える
0

そのため、UNCパスを使用する代わりに、Invoke-CommandやローカルのスケジュールされたタスクなどのPowerShellリモート処理を実行し、データが削除されたドライブにフォルダーが表示されるため、すべてのドライブで2003/2008スタイルのごみ箱を確認します。 。これはあなたが探しているものに正確に合うかもしれないし、合わないかもしれませんが、多分それは助けになるかもしれません。

$local_drives = Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}
foreach ($drive in $local_drives)
{
    $drive_letter = $drive.DeviceID
    $recycle_bins_03 = $drive_letter + '\RECYCLER'
    if (Test-Path $recycle_bins_03)
    {
        Get-ChildItem $recycle_bins_03 -Force | Remove-Item -Force -Recurse
    }
    $recycle_bins_08 = $drive_letter + '\$RECYCLE.BIN'
    if (Test-Path $recycle_bins_08)
    {
        Get-ChildItem $recycle_bins_08 -Force | Remove-Item -Force -Recurse
    }
}
于 2013-08-15T11:04:50.827 に答える