Скрипт Powershell для удаления пользователя и профиля ОБЪЯВЛЕНИЯ

#powershell #active-directory

Вопрос:

я полный новичок в кодировании/powershell. Я «написал» этот небольшой сценарий

 $Username = Read-Host -Prompt 'Bitte den Usernamen eingeben'

$HomeDirectory = '\serveruser'
$ProfilePath = '\serverprofiles'
$TsProfiles = '\servertsprofiles'

foreach ($user in $Username) {
    Remove-ADUser -Identity $user
}

foreach ($user in $Username) {
    Remove-Item "$HomeDirectory$user" -Recurse -Force -Verbose -whatif
}

foreach ($user in $Username) {
    Remove-Item -Path "$ProfilePath$user" -Recurse -Force -Verbose -whatif
}

foreach ($user in $Username) {
    Remove-Item "$TsProfiles$user*" -Recurse -Force -Verbose -whatif
}
 

Теперь этот скрипт работает нормально. Но у меня есть одна маленькая «проблема».

1.) Для некоторых Пользователей нет ни TsProfiles, ни пути к профилю, ни Пользователя. Поэтому, когда я запускаю скрипт, я получаю эту ошибку

 At line:15 char:5
      Remove-Item -Path "$ProfilePath$user" -Recurse -Force -Verbose - ...
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : ObjectNotFound: (\serverprofilesmyusername:String) [Remove-Item], ItemNotFoundException
      FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
 

Наверняка, потому что такого пути нет, так как у пользователя нет профиля в этой папке. Теперь я ищу решение, которое может записать мне что-то подобное в файл журнала

** Домашняя страница %Имя пользователя% удалено **

** TsProfiles %Имя пользователя% удалено **

** Путь к профилю для %Имя пользователя% не найден **

Комментарии:

1. Я думаю, ты хочешь чего-то вроде If(Test-Path "$HomeDirectory$user"){Remove-Item "$HomeDirectory$user" -Recurse -Verbose -Force -WhatIf; Add-Content -Value "** HomeDirectory of $User deleted **" -Path $LogFile}Else{Add-Content -Value "** HomeDirectory of $User not found **" -Path $LogFile}

2. Большое вам спасибо ! Это работает идеально ! Можно ли будет войти в систему, если пользователь также был удален ? Я не знаю, как это проверить, так как я не могу использовать тестовый путь 🙁

Ответ №1:

Хорошо, во-первых, у вас должно быть все это в одном цикле, а не в нескольких циклах, но вы работаете только с 1 пользователем, так что перебирать нечего. Мы просто уберем все петли.

Затем, если вы хотите вывести, удалили ли вы что-то, вам нужно проверить, есть ли это что-то. Для пользователей , которых мы можем использовать Get-ADUser , и для путей к файлам, которые мы можем использовать Test-Path .

 $Username = Read-Host -Prompt 'Bitte den Usernamen eingeben'

$HomeDirectory = '\serveruser'
$ProfilePath = '\serverprofiles'
$TsProfiles = '\servertsprofiles'

If(Get-ADUser $username){
    Remove-ADUser -Identity $username
    Add-Content -Value "** User Account for $Username deleted **" -Path $LogFile
}Else{
    Add-Content -Value "** User Account for $Username not found **" -Path $LogFile
}
If(Test-Path "$HomeDirectory$username"){
    Remove-Item "$HomeDirectory$username" -Recurse -Verbose -Force -WhatIf
    Add-Content -Value "** HomeDirectory of $Username deleted **" -Path $LogFile
}Else{
    Add-Content -Value "** HomeDirectory of $Username not found **" -Path $LogFile
}
If(Test-Path "$ProfilePath$username"){
    Remove-Item "$ProfilePath$username" -Recurse -Verbose -Force -WhatIf
    Add-Content -Value "** ProfilePath of $Username deleted **" -Path $LogFile
}Else{
    Add-Content -Value "** ProfilePath of $Username not found **" -Path $LogFile
}
If(Test-Path "$TsProfiles$username"){
    Remove-Item "$TsProfiles$username" -Recurse -Verbose -Force -WhatIf
    Add-Content -Value "** TsProfiles of $Username deleted **" -Path $LogFile
}Else{
    Add-Content -Value "** TsProfiles of $Username not found **" -Path $LogFile
}
 

Комментарии:

1. Да, это моя вина, я забыл, что мы удалили петлю, поэтому нам нужно использовать $Username вместо просто $User . Я обновил ответ, теперь он должен работать так, как задумано.

2. К сожалению, часть с пользователем не работает. Если я использую имя пользователя,которого не существует, я получаю сообщение об ошибке от Powershell Get-ADUser : Не удается найти объект с идентификатором: «asdsada» в разделе: «DC=int, DC=домен,DC=de». Но в журнале нет записи о том, что пользователь не был найден, я просто вижу, что папки не найдены.

3. ах, верно, Get-ADUser не любит искать конкретного пользователя и не находить его. В качестве альтернативы вы можете сделать Get-ADUser -filter "samAccountName -eq '$Username'" это вместо этого, и это не приведет к ошибке на вас и должно работать так, как ожидалось

4. Я ввел этот код, и его работа просто должна была изменить имя пользователя $на $user 😛 Теперь последний вопрос: могу ли я также показать ошибку, когда пользователь не существует в окне Powershell ? Прямо сейчас вы вводите неправильное имя и должны проверить файл журнала, если произошла ошибка.

5. Понял 🙂 Просто добавлен вывод записи «** Пользователь-объявление $Пользователь не найден **» В каждой строке с правильным текстом 🙂