删除W2K3回收站的内容
问题描述:
编写一个Powershell脚本,该脚本从虚拟服务器的回收站中删除所有内容。出于某种原因,我遇到了一个错误,找到Windows 2003回收站的路径,无法找到bin以删除它中的所有内容。想知道如果任何人在这里可以给我什么,我做错了这个代码片段一些建议:删除W2K3回收站的内容
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回收站也是正确的代码应该正常工作,一旦我能够找到回收站的路径。这是我收到的那些奇怪的错误消息的看图:
而且,出于好奇,是有办法来减少这些代码,使2俏皮话了2003年和2008年?我意识到目前我写这篇文章的方式并没有利用Powershell的cmdlet,而是想在我找出W2K3回收站出现问题后改进它。
答
问题是在widows server 2003的c:\ recycler中找不到回收站c:\回收,所以只能改变你的代码,它应该可以工作。
试试这个代码,看看它是否解决了这个问题
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远程像调用命令或本地的计划任务,而不是使用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
}
}
我更新了代码,我认为这就是路径问题,但是现在我得到一个新的错误,指出指定的路径名太长。任何想法为什么发生这种情况(我甚至不知道这个例外存在) – Valrok 2012-07-27 15:45:10
不知道尝试编辑你的代码,如添加到我的帖子 – justinf 2012-07-27 15:51:27
每当我运行这个我得到旧的错误,无法再次找到通路。 – Valrok 2012-07-27 19:53:31