Работа над HR-проектом на работе для обработки пользовательских завершений с помощью кода PS. Текущая задача заключается в следующем: 1. Проверить учетную запись пользователя, если она включена / отключена. 2. Если отключено, проверьте SAMAccount их менеджера, если включено / отключено. 3. Повторяйте до тех пор, пока учетная запись не будет найдена включенной. 4. Верните SAMAccount этой учетной записи.
Рабочий код на данный момент:
$testuser = "johndoe"
If ($(get-aduser $testuser).enabled -eq $true{
$usermgr1 = get-aduser $testuser -properties * | select @{Name='Manager';Expression={(Get-ADUser $_.Manager).SAMAccountName}}
}
Вывод вышеуказанного отформатирован, как показано ниже. Я определенно не хочу заголовок.
Manager
------
JaneDoe
Затем я попытался расширить это до первого теста, проверяя, включена ли учетная запись менеджера:
If ($get-aduser $usermgr1).enabled -eq $true) | select @{Name='Manager';Expression={(Get-ADUser $_.Manager).SAMAccountName}}
Else Write-Host "Manager Account Disabled"
}
Это попытка возвращает ошибку:
Get-ADUser : Cannot validate argument on parameter 'Identity'. The Identity property on the argument is null or empty.
At line:4 char:18
+ If ($(get-aduser $usermgr1).enabled -eq $true){write-host "Enabled"}
Ожидаемый вывод здесь - это SAMAccount менеджера этого пользователя, если он включен; если отключено, я бы продолжил добавлять больше кодов до четырех или пяти Я еще не знаю достаточно PowerShell для l oop назад и динамического повторного тестирования, чтобы избежать его жесткого кодирования.
-EDIT-
Используя пример itchydon, я решил ограничить рекурсия на два уровня выше целевого пользователя. Вероятность одновременного отключения трех или более уровней мала. Поэтому рабочий код:
$testuser = "janedoe"
$user = get-aduser $testuser -properties manager
if ($user.enabled -eq $false){
$usermgr1 = get-aduser $user.manager
if ($usermgr1.enabled -eq $true){Write-Host $usermgr1.SamAccountName}
else{
$user1 = get-aduser $usermgr1 -properties manager
if ($user1.enabled -eq $false){
$usermgr2 = get-aduser $user1.manager
if ($usermgr2.enabled -eq $true){
Write-Host $usermgr2.SamAccountName}
else{Write-Host "Recursion cannot complete. Handle manually."}
}
}
}
-EDIT-
Теперь с рабочим кодом пытаемся установить свойства почтового ящика с теми же логами c. Что я заметил, так это то, что команда set-mailbox выполняется в первом тесте, независимо от того, отключен менеджер или нет:
if ($user.enabled -eq $false){
$usermgr1 = get-aduser $user.manager
if ($usermgr1.enabled -eq $true){
$mgr1 = $usermgr1.SamAccountName
$mgr1email = get-aduser $mgr1 -properties EmailAddress
$mgr1email.emailaddress
}
Set-Mailbox $testuser -ForwardingAddress $mgr1email.EmailAddress -DeliverToMailboxAndForward $False
Set-MailboxAutoReplyConfiguration -identity $testuser -AutoReplyState Enabled -InternalMessage $internal -ExternalMessage $external
Write-Host $testuser "Completed"
}
else{
В этом случае проверяется, $ usermgr1.enabled -eq $ Значение true завершается ошибкой, и я ожидаю, что команды set-mailbox будут полностью пропущены, перейдя к оператору else {.
. Я подумал, что это просто вопрос перемещения команд внутри объявления теста следующим образом:
if ($user.enabled -eq $false){
$usermgr1 = get-aduser $user.manager
if ($usermgr1.enabled -eq $true){
$mgr1 = $usermgr1.SamAccountName
$mgr1email = get-aduser $mgr1 -properties EmailAddress
$mgr1email.emailaddress
Set-Mailbox $testuser -ForwardingAddress $mgr1email.EmailAddress -DeliverToMailboxAndForward $False
Set-MailboxAutoReplyConfiguration -identity $testuser -AutoReplyState Enabled -InternalMessage $internal -ExternalMessage $external
Write-Host $testuser "Completed"
}
}
else{
Однако конечный результат этого, когда включенный тестовый тест проходит, состоит в том, что команды set-mailbox пропускаются полностью, и никаких действий не предпринимается вообще.
-EDIT- Исправлено Проблема с командами почтового ящика, оставляя объявления переменных в их собственном блоке следующим образом:
$user = get-aduser $testuser -properties manager
if ($user.enabled -eq $false){
$usermgr1 = get-aduser $user.manager
$mgr1 = $usermgr1.SamAccountName
$mgr1email = get-aduser $mgr1 -properties EmailAddress}
if ($usermgr1.enabled -eq $true){
Set-Mailbox $testuser -ForwardingAddress $mgr1email.EmailAddress -DeliverToMailboxAndForward $False
Set-MailboxAutoReplyConfiguration -identity $testuser -AutoReplyState Enabled -InternalMessage $internal -ExternalMessage $external
Write-Host $testuser "Completed"
}