Как очистить папку C:\Users от лишних доменных профилей(папок)?

Итак имею:
C:\Usrers\admin
C:\Usrers\user1
C:\Usrers\user2
... и тд.
необходимо удалить все папки профилей кроме admin.
Сделать это надо использую gpo.
Пытался через PS удалить пишет отказано в доступе. Через explorer написало мол ntuser.dat используется system и поэтому фиг тебе а не удаление.
$users = Get-Content c:\users.txt

$folder = Get-ChildItem c:\Users | Where-Object {$_.mode -like "D*"}

$compare = Compare-Object $users $folder

$compare | foreach-object {Remove-Item -path c:\Users\$($_.inputobject) -recurse -force}


Вообщем как удалить все папки пользователя кроме одной (а лучше нескольких) нужных?
PS написать что все компы в домене
  • Вопрос задан
  • 8749 просмотров
Пригласить эксперта
Ответы на вопрос 3
@res2001
Developer, ex-admin
Надо запускать с повышенными привилегиями.
Ответ написан
@skazi_premiere
Верстаем как умеем ;) HTML/CSS/JS
Руками лучше такое не делать есть оснастка же для этих целей. Управление пользователями. Либо гуглим How to delete Windows user profile with PowerShell? и попадаем на technet где уже есть решение.

UPD: естественно все делаем от учетки с правами локального админа на станции.
UPD2: Ссылка из статьи и код ниже
[cmdletbinding()]            
param(            
 [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]            
 [string[]]$ComputerName = $env:computername,            
 [parameter(mandatory=$true)]            
 [string]$UserName            
            
)            
            
Begin {}            
            
Process {            
            
    foreach($Computer in $ComputerName) {            
     Write-Verbose "Working on $Computer"            
     if(Test-Connection -ComputerName $Computer -Count 1 -ea 0) {            
      $Profiles = Get-WmiObject -Class Win32_UserProfile -Computer $Computer -ea 0            
      foreach ($profile in $profiles) {            
       $objSID = New-Object System.Security.Principal.SecurityIdentifier($profile.sid)            
       $objuser = $objsid.Translate([System.Security.Principal.NTAccount])            
       $profilename = $objuser.value.split("\")[1]            
       if($profilename -eq $UserName) {            
        $profilefound = $true            
        try {            
         $profile.delete()            
         Write-Host "$UserName profile deleted successfully on $Computer"            
        } catch {            
         Write-Host "Failed to delete the profile, $UserName on $Computer"            
        }            
       }            
      }            
            
      if(!$profilefound) {            
       write-Warning "No profiles found on $Computer with Name $UserName"            
      }            
     } else {            
      write-verbose "$Computer Not reachable"            
     }            
    }            
            
    }            
            
end {}

Пример использования Remove-UserProfile.ps1 -ComputerName PC1, PC2, PC3 -UserName LocalUser2
Перепишите под себя получение имен профилей и готово.
Ответ написан
Pr0per
@Pr0per
Software Engineer/Beginner Web Developer
Удалял лишние папки профилей локальным администратором, проблем ни разу не возникало.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы