Pergunta

Escrever um script Powershell que exclui todo o conteúdo da lixeira para servidores virtuais.Por algum motivo que eu estou correndo em um erro de encontrar o caminho para o Windows 2003 lixeira e não podem localizar bin, a fim de eliminar tudo o que nele há.Queria saber se alguém aqui poderia me dar alguns conselhos sobre o que eu estou fazendo de errado com este código-trecho:

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 
    }

Eu sou capaz de apagar tudo, desde o W2K8 lixeira corretamente para que o código possa funcionar correctamente, uma vez que eu sou capaz de encontrar o caminho para a reciclagem.Aqui está uma imagem da mensagem de erro que eu receber para aqueles curiosos em ver:

enter image description here

Também, por curiosidade, existe uma maneira de reduzir todo esse código e fazer 2 one-liners para tanto 2003 e 2008?Eu percebo que a forma atual que eu escrevi isso não tira vantagem de os cmdlets do Powershell e quer melhorá-lo, uma vez que eu descobri o que há de errado com W2K3 lixeira.

Foi útil?

Solução

O problema é que a reciclagem é encontrado neste local do windows server 2003 c: ecycler não c: ecycled assim jsut alterar o código e ele deve funcionar.

Tente este código e ver se ele resolve o 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
}

Outras dicas

Então eu executar a minha através do powershell remoting como o Comando Invoke ou um local de tarefa agendada em vez de usar caminhos UNC, e eu apenas a verificação de todas as unidades para um ou 2003/2008 estilo de lixeiras desde a pasta, irá aparecer em qualquer unidade de dados foi apagado.Isso pode ou não se encaixar exatamente o que você está procurando, mas talvez ele pudesse ajudar.

$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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top