Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Powershell重新搜索用户';第一个启用的管理器的报告结构_Powershell_Active Directory - Fatal编程技术网

如何使用Powershell重新搜索用户';第一个启用的管理器的报告结构

如何使用Powershell重新搜索用户';第一个启用的管理器的报告结构,powershell,active-directory,Powershell,Active Directory,在工作中处理带有PS代码的用户终止的人力资源项目。目前的挑战是: 1.如果启用/禁用,则测试用户帐户。 2.如果禁用,则测试其经理的SAMAccount(如果启用/禁用)。 3.重复此操作,直到找到已启用的帐户 4.返回该帐户的SAMAccount 迄今为止的工作守则: $testuser = "johndoe" If ($(get-aduser $testuser).enabled -eq $true{ $usermgr1 = get-aduser $testuser -properties

在工作中处理带有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"
}
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{
此尝试返回一个错误:

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可以循环并动态重新测试,以避免硬编码

-编辑-

使用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."}
                }
            }
}
-编辑-

现在,使用工作代码,尝试使用相同的逻辑设置邮箱属性。我注意到的是,无论管理器是否被禁用,set mailbox命令都会在第一次测试中执行:

If ($get-aduser $usermgr1).enabled -eq $true) | select @{Name='Manager';Expression={(Get-ADUser $_.Manager).SAMAccountName}}
Else Write-Host "Manager Account  Disabled"
}
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邮箱命令,而不采取任何操作

-编辑- 修复了邮箱命令问题,将变量声明保留在它们自己的块中,如下所示:

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

不幸的是,我无法测试这一点,但我认为这正是你所追求的

$testuser = "johndoe"    
$user = get-aduser $testuser -properties manager
if ($user.enabled -eq $true){
    $usermgr1 = get-aduser $user.manager
    if ($usermgr1.enabled -eq $false){
        Write-Host "Manager Account  Disabled"
    }
    else{
        write-host $usermgr1.samaccountname
    }
}

在上面的例子中,我们没有继续执行
getaduser
操作,而是为testuser执行一次,并将其保存到一个变量(
$user
)。然后,我们可以访问对象的每个属性-因此我们使用它来检查启用状态,如图所示,例如
$user.enabled-eq$true
。如果为true-使用相同的技术进行另一次
获取aduser
,以获取管理者的信息

谢谢你,Itchy;使用你的建议更新了扩展问题的原始问题orated.Short版本是,现在命令要么在不应该执行的时候执行,要么在应该执行的时候不执行。可能只是一个逻辑错误。是的,大部分情况下。奇怪的是,脚本似乎在一条记录上出现了问题,而在这条记录中,用户帐户实际上是在当时启用的。我原以为会出现.enabed-eq$false的第一行在任何被跳过的已启用帐户中的d。是否有必要在脚本末尾显式声明此条件?我假设它可以被忽略,并且如果第一个条件失败,脚本将完全退出。我不确定是否遵循。目前是如果($user.enabled-eq$false){$usermgr1=get aduser$user.manager