编写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的cmdlets并希望在我想出W2K3回收站的错误时改进它。

有帮助吗?

解决方案

问题是回收站在寡妇服务器2003 C:\ Recycler不是C:\ Recycled中找到的位置,所以JSUT更改代码,它应该工作。

尝试此代码,看看它是否修复了问题

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
}
.

其他提示

所以我通过PowerShell远程处理,如Invoke-命令或本地预定任务而不是使用UNC路径,而我只需检查所有驱动器,因为该文件夹将出现在数据的任何驱动器上都会出现从删除。这可能会或可能不适合您所在的内容,但也许可能有帮助。

$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
    }
}
.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top