¿Secuencia de comandos para eliminar muchos perfiles de usuario antiguos del servidor de archivos?

¿Secuencia de comandos para eliminar muchos perfiles de usuario antiguos del servidor de archivos?

Tengo un recurso compartido de red en una máquina con Windows Server 2012 que se utiliza para almacenar todos los archivos de perfil de usuario (Mis documentos, Escritorio, etc.).

Hay cientos de usuarios antiguos de los que necesito deshacerme y los voy a revisar todos uno por uno... primero haciendo que el administrador sea el propietario de todos los archivos de un usuario... luego dándole control total a todos los archivos de ese usuario. archivos al administrador... luego eliminar los archivos de ese usuario... y luego pasar al siguiente usuario.

Esto llevará días.

Hay muchos archivos de usuario válidos/actuales de los que no quiero convertirme en propietario ni eliminarlos también en este mismo directorio.

¿Existe alguna forma que requiera menos tiempo para eliminar carpetas específicas en este recurso compartido de red?

¿Algún tipo de script que pueda ingresar a todos los usuarios antiguos y dejar que haga su trabajo durante unas horas?

Respuesta1

¡Claro, con PowerShell todo es posible! :-) Este es un proceso general de cómo se puede hacer esto.

Puede comenzar leyendo las carpetas/usuarios principales que desea eliminar, desde un archivo CSV con los comandos Import-CSV $Filename | ForEach-Object.

Para cada carpeta superior, en el bloque ForEach, puede leer todas las subcarpetas y archivos con Get-ChildItem -Recurse.

Luego puede tener un segundo archivo CSV con los archivos o carpetas que no deben eliminarse, y para cada archivo que recorra, puede leerlo y compararlo con este archivo, si se guardará o eliminará (después de tomar posesión).

Respuesta2

Tuve que hacerlo de nuevo, así que revisé esto hoy, siguiendo las sugerencias de @PatrikN, este es el script de PowerShell que utilicé:

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

No terminé usando archivos CSV.

El script recorre todos los directorios de perfiles de usuario, consulta si el nombre está en el directorio activo, si no: toma posesión, establece permisos completos y luego elimina. Funcionó bien.

información relacionada