Script para excluir muitos perfis de usuários antigos do servidor de arquivos?

Script para excluir muitos perfis de usuários antigos do servidor de arquivos?

Eu tenho um compartilhamento de rede em uma máquina Windows Server 2012 que é usada para armazenar todos os arquivos de perfil do usuário (Meus Documentos, Área de Trabalho, etc.).

Há centenas de usuários antigos dos quais preciso me livrar e estou examinando todos eles um por um... primeiro tornando o administrador o proprietário de todos os arquivos de um usuário... depois dando controle total a todos os usuários desse usuário. arquivos para o administrador... em seguida, excluindo os arquivos desse usuário... e então indo para o próximo usuário.

Isso levará dias.

Existem muitos arquivos de usuário válidos/atuais dos quais não quero me tornar proprietário ou excluir também neste mesmo diretório.

Existe alguma maneira menos demorada de excluir pastas específicas neste compartilhamento de rede?

Algum tipo de script que eu possa inserir em todos os usuários antigos e deixá-lo funcionar por algumas horas?

Responder1

Claro, com o PowerShell tudo é possível! :-) Este é um processo geral de como isso pode ser feito.

Você pode começar lendo as principais pastas/usuários que deseja excluir, de um arquivo CSV com os comandos Import-CSV $Filename | ForEach-Object.

Para cada pasta superior, no bloco ForEach, você pode ler todas as subpastas e arquivos com a extensão Get-ChildItem -Recurse.

Você pode então ter um segundo arquivo CSV com os arquivos ou pastas que não devem ser excluídos e, para cada arquivo percorrido, você pode ler e comparar com esse arquivo, se ele deve ser salvo ou excluído (após assumir a propriedade).

Responder2

Eu tive que fazer isso de novo, então revisitei isso hoje, seguindo sugestões de @PatrikN, este é o script do PowerShell que usei:

Get-ChildItem C:\UserDocs |
    ForEach-Object {
        if (!(Get-ADUser -Filter "sAMAccountName -eq '$($_.Name)'")) {
            "$($_.Name) does not exist and is being deleted."
            takeown /a /r /d Y /f $_.FullName
            $Acl = Get-Acl $_.FullName
            $Acl.AddAccessRule(
                (New-Object System.Security.AccessControl.FileSystemAccessRule(
                    [System.Security.Principal.WindowsIdentity]::GetCurrent().Name,
                    "FullControl",
                    "ContainerInherit, ObjectInherit",
                    "None",
                    "Allow"
                ))
            )
            (Get-Item $_.FullName).SetAccessControl($Acl)
            Remove-Item -LiteralPath $_.FullName -Force -Recurse
        }
    }

Acabei não usando arquivos CSV.

O script percorre todos os diretórios de perfil de usuário, consulta se o nome está no diretório ativo, caso contrário: assuma a propriedade, defina permissões completas e exclua. Funcionou bem.

informação relacionada