0

编写一个 Powershell 脚本,从虚拟服务器的回收站中删除所有内容。出于某种原因,我在查找 Windows 2003 回收站的路径时遇到错误,并且无法找到 bin 以删除其中的所有内容。想知道这里是否有人可以就我在这段代码片段中做错了什么给我一些建议:

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 的 cmdlet,并且一旦我弄清楚 W2K3 回收站有什么问题,就想对其进行改进。

4

2 回答 2

2

问题是在 widows server 2003 c:\recycler not 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

因此,我通过诸如 Invoke-Command 之类的 powershell 远程处理或本地计划任务来运行我的,而不是使用 UNC 路径,并且我只检查所有驱动器是否有 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 回答