Eliminación del contenido de la papelera de reciclaje W2K3

Escribir un script de Powershell que elimine todo el contenido de las papeleras de reciclaje de los servidores virtuales. Por alguna razón, me encuentro con un error al encontrar la ruta de la papelera de reciclaje de Windows 2003 y no puedo ubicar la papelera para eliminar todo lo que contiene. Me preguntaba si alguien aquí podría darme algún consejo sobre lo que estoy haciendo mal con este fragmento de código:

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 
    }

Puedo eliminar todo de la papelera de reciclaje W2K8 correctamente, por lo que el código debería funcionar correctamente una vez que pueda encontrar la ruta a la papelera de reciclaje. Aquí hay una imagen del mensaje de error que recibo para aquellos curiosos en ver:

enter image description here

Además, por curiosidad, ¿hay alguna manera de reducir todo este código y hacer 2 frases ingeniosas para 2003 y 2008? Me doy cuenta de que la forma actual en que escribí esto no aprovecha los cmdlets de Powershell y quiero mejorarlo una vez que haya descubierto qué es lo que está mal con la papelera de reciclaje W2K3.

preguntado el 27 de julio de 12 a las 14:07

2 Respuestas

El problema es que la papelera de reciclaje se encuentra en esta ubicación en el servidor de viudas 2003 c: \recycler not c:\recycled, así que simplemente cambie su código y debería funcionar.

Pruebe este código y vea si soluciona el problema

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
}

Respondido 27 Jul 12, 16:07

Actualicé el código y creo que ese era el problema con la ruta; sin embargo, ahora aparece un nuevo error que dice que el nombre de la ruta especificada es demasiado largo. Cualquier idea sobre por qué ocurre esto (ni siquiera sabía que existía esta excepción): Valrok

cada vez que ejecuto esto, aparece el antiguo error de no poder encontrar el camino nuevamente. - Valrok

Así que ejecuto el mío a través de la comunicación remota de PowerShell como Invoke-Command o una tarea programada local en lugar de usar rutas UNC, y solo verifico todas las unidades en busca de papeleras de reciclaje de estilo 2003/2008, ya que la carpeta aparecerá en cualquier unidad de la que se eliminaron los datos. Esto puede o no ajustarse exactamente a lo que está buscando, pero tal vez podría ayudar.

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

Respondido 15 ago 13, 12:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.