Проверка менеджера пользователя - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь проверить, есть ли у пользователя менеджер в AD, если он пуст / пуст, я предоставляю значение, на которое его необходимо изменить.В настоящее время у меня есть рабочий код, если значение не равно нулю и отличается, но я получаю сообщение об ошибке, если оно равно нулю.

Я пробовал несколько вариантов поиска, но всегда возвращаюсь к ошибке, когда значениеявляется нулевым.

Import-Module ActiveDirectory
if ((Get-PSSnapin -Name Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue) -eq $null) {
    Add-PSSnapin Quest.ActiveRoles.ADManagement
}
Connect-QADService foo.domain.com

#Specify User, then manager value to check against
Write-Host "What is the user's name?"
$User = Read-Host
Write-Host "Who is the manager we are checking against?"
$manager = Read-Host

#Check if Manager Value is null
if (-not ($ADemanager = (Get-ADUser (Get-ADUser $OBUID -Properties manager).manager).SamAccountName)) {
    Write-Host "User's Manager value is EMPTY or NULL in AD."
    $ADemanager = "Null Value"
    Write-Host "  NOTE: Changing the value from $ADemanager to $OBemanager per HR Records."
    Get-ADUser $OBUID |
        Set-ADUser -Manager $OBemanager -PassThru |
        Get-ADUser -Properties Manager |
        Select Name, Manager
} else {
    Write-Host "User's Manager Name not EMPTY in AD."
    Write-Host "Checking to see if manager's match in AD."
    if ($ADemanager -eq $OBemanager) {
        #Manager from AD matches manager listed on offboarding form
        Write-Host "The manager matches AD Value."
    } else {
        Write-Host "  NOTE: Manager from Offboarding form does not match manager listed in AD." -ForegroundColor Yellow
        Write-Host "  NOTE: Changing the value from $ADemanager to $OBemanager per HR Records."

        #Change Manager in AD (Make sure right variables used below)
        Get-ADUser $OBUID |
            Set-ADUser -Manager $OBemanager -PassThru |
            Get-ADUser -Properties Manager |
            Select Name, Manager
    }
}

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

Я думаю, что проще выбрать правильный аккаунт менеджера и сравнить его с менеджером пользователя - сработает следующее.

Чтобы выписать неправильное имя менеджера из свойств пользователя, я только что получил немного -replace, чтобы сократить выбранное имя для учетной записи CN.Это помогает, если это соответствует вашему samAccountName.Если они этого не делают, и вы действительно хотите samAccountName, вам понадобится еще Get-ADUser для этой цели, но это кажется немного неэффективным.

$ADuser     = Get-ADUser $OBUID -Properties Manager
# look up the manager account from user input
$OBemanager = Get-ADuser $mgrID

if ($ADuser.manager -eq $OBemanager) { #this will match the manager DN
    Write-Host "The manager matches AD Value."
}
else {
    #shorten the manager account DN from the user manager attribute
    if ($aduser.manager) {
        $mgrname = $ADuser.manager -replace '^CN=|,OU.*$'
    }
    else {
        $mgrname -eq 'null value'
    }
    Write-Host "NOTE: Changing the value from $mgrname to $($OBemanager.samAccountName) per HR Records."
    Set-ADUser -Manager $OBemanager -PassThru |
    Get-ADUser -Properties Manager | Select Name,Manager    
}
0 голосов
/ 29 марта 2019

Так что я переработал проблему по-другому.

Большинство переменных загружаются из формы вместе с

  $OBmanager = $cmbOBManager.Text.Split(",")
  $OBmanagername = $OBmanager[0]
  $OBemanager = $OBmanager[1].Trim()
  $OBestring = "@iconectiv.com"
  $OBEmpManager = $OBemanager + $OBestring


  #-check if manager from offboarding form is same listed in AD
  #Check User's manager name
  $userEntry = get-qaduser $OBUID
  [string]$man = $userEntry.manager
  #Check if manager name is null
  if (-not ($man -eq $null)) 
  {
    [array]$manName = $man.split('=,')
    $manager = $manName[1]
    #If null, change to HR specified value
    If($manager -eq $null)
    {
        Write-Host "The user's manager is Null in AD."
        Write-Host "Changing the user's manager to the HR supplied value."
        Get-aduser $OBUID | Set-ADUser -Manager $OBemanager -PassThru | get-aduser -Properties Manager | Select Name,Manager

        #Send Email
        ManagerChange
    }
    else
    {
        Write-Host "$manager is the manager of $OBUID";
        $ADemanager = (get-aduser (get-aduser $OBUID -Properties manager).manager).samaccountName
        #Check if AD value is the same as HR value
        If($ADemanager -eq $OBemanager)
        {
            Write-Host "The HR manager name supplied value matches the AD Value."
        }
        else
        {
            Write-Host "The HR manager name supplied value doesn't match the AD Value."
            Write-Host "Changing the manager value in AD to the HR supplied value."
            Get-aduser $OBUID | Set-ADUser -Manager $OBemanager -PassThru | get-aduser -Properties Manager | Select Name,Manager

            #Sending email
           ManagerChange

        }
    }
0 голосов
/ 26 марта 2019

Я полагаю, что приведенный ниже фрагмент кода должен выполнить то, что вы просите: определить текущего менеджера пользователя и, если он отличается от желаемого менеджера (либо потому, что другой менеджер был назначен, либо вообще не был назначен менеджер), обновить пользователя объект с новым менеджером.

$ADuser     = Get-ADUser $OBUID -Properties Manager
$ADemanager = $ADuser |
              Where-Object { $_.Manager } |
              Select-Object -Expand Manager |
              Get-ADUser |
              Select-Object -Expand SamAccountName

if ($ADemanager -ne $OBemanager) {
    $ADuser |
        Set-ADUser -Manager $OBemanager -PassThru |
        Get-ADUser -Properties Manager |
        Select Name, Manager
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...