#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. Понял 🙂 Просто добавлен вывод записи «** Пользователь-объявление $Пользователь не найден **» В каждой строке с правильным текстом 🙂