Pregunta

Escribiendo un script de PowerShell que elimina todos los contenidos de los contenedores de reciclaje para servidores virtuales. Por alguna razón, estoy llegando a un error al encontrar la ruta para la Papelera de reciclaje de Windows 2003 y no puede localizar PIN para eliminar todo en él. Se preguntaba si alguien aquí podría darme algunos consejos sobre lo que estoy haciendo mal con este código-fragmento:

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 
    }

Soy capaz de eliminar todo desde la Papelera de reciclaje W2K8, 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 foto del mensaje de error que recibo para aquellos curiosos al ver:

ingrese la descripción de la imagen aquí

Además, sin curiosidad, ¿hay una manera de reducir todo este código y hacer 2 revestimientos para 2003 y 2008? Me doy cuenta de que la forma en curso que he escrito esto no se aprovecha de los cmdlets de PowerShell y quiere mejorarlo una vez que haya descubierto lo que está mal con W2K3 Recycle Pin.

¿Fue útil?

Solución

El problema es que la Papelera de reciclaje se encuentra en esta ubicación en WIDOWS Server 2003 C: \ Recycler no C: \ reciclado, por lo que JSUT cambia tu 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
}

Otros consejos

Así que manejo la mía a través de PowerShell que remota como Invoke-Command o una tarea programada local en lugar de usar las rutas de UNC, y simplemente verifico todas las unidades para los contenedores de reciclaje de estilo de 2003/2008 desde que aparecerá la carpeta en cualquier unidad los datos.Fue eliminado de. Esto puede o no puede caber exactamente lo que está buscando, pero tal vez pueda 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
    }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top