Estou tentando criar um script que procura todos os perfis de usuário. Os perfis que não são acessados há 90 dias ou mais são excluídos. Também quero excluir suas pastas de C:\Users para liberar espaço no disco rígido.
cd C:\Users\
foreach ($dir in $OlderDays) {
Get-CimInstance -ComputerName $ComputerName -Class Win32_UserProfile -ErrorAction Stop | Where-Object {$_.Special -eq $false}
Get-CimInstance -ComputerName $profile.ComputerName -ClassName Win32_UserProfile -ErrorAction Stop | Where-Object {$_.SID -eq $profile.RegKey.SID -and $_.LocalPath -eq $profile.RegKey.LocalPath} | Remove-CimInstance -ErrorAction Stop
Remove-item -force -Path $dir -recurse
}
Recebo acesso negado em todas as pastas que tentam ser excluídas de C:\Users.
Estou usando a conta admin. A única solução que encontrei até agora é remover, mas algumas estações de trabalho têm mais de 50 contas que precisam ser excluídas e isso não é muito eficiente quando clicar com o botão direito do mouse na pasta e clicar em excluir leva 10 segundos. Takeown levou cerca de 10 minutos por conta.
remove-item : Access to the path 'C:\Users\test5456\AppData\Local\Application Data' is denied.
At line:59 char:5
+ remove-item -force -Path C:\Users\$dir -recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Users\test5456:String) [Remove-Item], UnauthorizedAccessExcepti
on
+ FullyQualifiedErrorId : RemoveItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.RemoveItemCommand
Mesmo que você o esteja executando como administrador, você ainda terá que se apropriar da pasta (e de seu conteúdo) antes de poder excluí-la.
TakeOwn é notoriamente lento, usar Get-ACL e Set-ACL do PowerShell é mais rápido.
Para definir o proprietário da pasta e todo o seu conteúdo para o grupo Administradores integrado, seria algo assim (não testado):
Coloque isso dentro do loop Foreach, antes do comando Remove-Item.
Você não precisa fazer isso. O Windows fará isso por você com a política de grupo chamada:
Além disso, já existe uma ferramenta fornecida para fazer isso chamada
delprof
edelprof2
, se você quiser, faça manualmente. Ele também pode ser executado em um computador remoto.A solução recomendada funcionou principalmente para mim, mas:
O que funcionou para mim foi usar
cmd /c "rmdir $dir /s /q"
como comando deletar, então no seu caso seria:Essa solução é muito mais rápida e, até agora, excluiu mais de cem perfis em um computador sem uma única falha. Com o quão poderoso é o PowerShell, é uma pena que tenhamos que recorrer a chamar o cmd para fazer o trabalho, mas...
A solução foi encontrada aqui: https://forums.ivanti.com/s/article/Folder-delete-actions-fail-when-the-folder-contains-a-Junction-soft-link?language=en_US
Conforme comentado por @Ramhound, se o que você está tentando fazer é remover perfis de usuário antigos, não faça isso excluindo C:\Users\username . Primeiro, remova os perfis do PC e aguarde alguns minutos. Se funcionar corretamente, remover o perfil removerá a estrutura de pastas automaticamente. Se o perfil ainda existir, tentar excluir a pasta como você está tentando fazer gerará vários erros de permissão.
Consulte o conteúdo relacionado em
https://www.business.com/articles/powershell-manage-user-profiles/
https://community.spiceworks.com/how_to/124316-delete-user-profiles-with-powershell
Script Power Shell para excluir os perfis de usuário do servidor Windows 2008 r2 para a máquina local (Windows 7)