Question

Écrire un script PowerShell qui supprime tout le contenu des bacs de recyclage pour les serveurs virtuels. Pour une raison quelconque, je rencontre une erreur lors de la recherche du chemin pour la corbeille de recyclage de Windows 2003 et ne peut pas localiser la corbeille afin de supprimer tout. Je me demandais si quelqu'un ici pouvait me donner des conseils sur ce que je fais mal avec ce code-snippet:

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 
    }

Je suis en mesure de tout supprimer de la corbeille de recyclage W2K8 correctement afin que le code puisse fonctionner correctement une fois que je suis capable de trouver le chemin de la corbeille de recyclage. Voici une image du message d'erreur que je reçois pour ces curieux de voir:

Entrez la description de l'image ici

Également, hors de curiosité, existe-t-il un moyen de réduire tout ce code et de faire 2 doublures pour 2003 et 2008? Je me rends compte que la voie actuelle que j'ai écrite cette sortie ne profite pas des cmdlets de Powershell et que je souhaite l'améliorer une fois que je me suis trompé avec la corbeille de recyclage W2K3.

Était-ce utile?

La solution

Le problème est que la corbeille de recyclage se trouve sur cet emplacement dans Widows Server 2003 C: \ recycler non c: \ recyclés afin de modifier votre code et il devrait fonctionner.

Essayez ce code et voyez s'il corrige le problème

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
}

Autres conseils

Alors j'exécute le mien via PowerShell Remoting comme une commande d'invocation ou une tâche planifiée locale au lieu d'utiliser des chemins UNC, et je ne vérifie tout simplement que tous les lecteurs des bacs de recyclage de style 2003/2008, car le dossier apparaîtra sur tout lecteur des données.a été supprimé de .Ce mai ou peut ne pas correspondre exactement à ce que vous recherchez, mais peut-être que cela pourrait aider.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top