파일 서버에서 많은 이전 사용자 프로필을 삭제하는 스크립트?

파일 서버에서 많은 이전 사용자 프로필을 삭제하는 스크립트?

모든 사용자 프로필 파일(내 문서, 데스크톱 등)을 저장하는 데 사용되는 Windows Server 2012 컴퓨터에 네트워크 공유가 있습니다.

제거해야 할 수백 명의 기존 사용자가 있는데 하나씩 살펴보겠습니다. 먼저 관리자를 한 사용자의 모든 파일 소유자로 만들고... 그런 다음 해당 사용자 모두에게 모든 권한을 부여합니다. 파일을 관리자에게 보낸 다음... 해당 사용자의 파일을 삭제하고... 다음 사용자에게로 이동합니다.

며칠이 걸릴 것입니다.

동일한 디렉토리에도 소유자가 되거나 삭제하고 싶지 않은 유효한/현재 사용자 파일이 많이 있습니다.

이 네트워크 공유에서 특정 폴더를 삭제하는 데 시간이 덜 걸리는 방법이 있습니까?

모든 이전 사용자에게 입력할 수 있고 몇 시간 동안만 해당 작업을 수행하도록 할 수 있는 일종의 스크립트가 있습니까?

답변1

물론입니다. PowerShell을 사용하면 모든 것이 가능합니다! :-) 이는 이를 수행하는 방법에 대한 전반적인 프로세스입니다.

명령을 사용하여 CSV 파일에서 삭제하려는 상위 폴더/사용자를 읽는 것으로 시작할 수 있습니다 Import-CSV $Filename | ForEach-Object.

각 최상위 폴더에 대해 ForEach 블록에서 Get-ChildItem -Recurse.

그런 다음 삭제하면 안 되는 파일 또는 폴더가 포함된 두 번째 CSV 파일을 가질 수 있으며, 루프를 통과하는 각 파일에 대해 저장하거나 삭제해야 하는 경우(소유권을 얻은 후) 이 파일을 읽고 비교할 수 있습니다.

답변2

나는 그것을 다시 해야 했기 때문에 오늘 이것을 다시 방문했습니다. @PatrikN의 제안에 따라 이것은 제가 사용한 powershell 스크립트입니다.

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

결국 CSV 파일을 사용하지 않았습니다.

스크립트는 모든 사용자 프로필 디렉터리를 반복하여 이름이 활성 디렉터리에 있는지 쿼리하고 그렇지 않은 경우 소유권을 가져오고 전체 권한을 설정한 다음 삭제합니다. 잘 작동했습니다.

관련 정보