segunda-feira, 10 de maio de 2010

Lista de Subordinados

Olá!!!

Neste post um script em PowerShell que fiz recentemente. Este script retorna na console do Powershell as pessoas que estão subordinadas a um gestor, e as pessolas indiretamente subordinadas a este mesmo gestor.

Para usá-lo basta chamar o script passando como parameto o DisplayName da pesssoa (gestor):

PS C:\Users\Administrator\Desktop> .\ListManager.ps1 ‘Dunga’

image

imageimage

No exemplo mostrado acima, dois usuários, Julio Cesar e Robinho se reportam para Dunga e outros dois usuários, José e João se reportam a Julio Cesar e Robinho respectivamente.

$credential = Get-Credential

set-variable -name URI -value "http://localhost:5725/resourcemanagementservice' " -option constant

clear
If
($args.count -ne 1)
   {
      Throw "Digite o DisplayName do gestor!"
   }

$ManagerName = $args[0]
$Filter = "/Person[DisplayName='$ManagerName']"


If(@(Get-PSSnapin | Where-Object {$_.Name -eq "FIMAutomation"} ).count -eq 0)
   {
      Add-PSSnapin FIMAutomation
   }

$curObject = export-fimconfig -uri $URI -credential $credential –onlyBaseResources -customconfig ($Filter) -ErrorVariable Err -ErrorAction SilentlyContinue

If($Err)
   {
      Throw $Err
   }

If($curObject -eq $null)
   {
      Throw "Nome não encontrado!"
   }

$attrObjectID = (($curObject.ResourceManagementObject.ResourceManagementAttributes | Where-Object {$_.AttributeName -eq "ObjectID"}).Value).split(":")[2]

$Filter_Manager = "/Person[Manager = '$attrObjectID']"

[array]$curObject_Direct = export-fimconfig -uri $URI -credential $credential –onlyBaseResources -customconfig ($Filter_Manager) -ErrorVariable Err -ErrorAction SilentlyContinue

write-host "Estas pessoas reportam diretamente a $ManagerName"

$arrayIndireto = @()

foreach($DirectReport in $curObject_Direct)
{
   write-host " +" ($DirectReport.ResourceManagementObject.ResourceManagementAttributes | Where-Object {$_.AttributeName -eq "DisplayName"}).Value
   $Direct = (($DirectReport.ResourceManagementObject.ResourceManagementAttributes | Where-Object {$_.AttributeName -eq "ObjectID"}).Value).split(":")[2]
   $Filter_Direct = "/Person[Manager = '$Direct']"
   [array]$curObject_Indirect = export-fimconfig -uri $URI -credential $credential –onlyBaseResources -customconfig ($Filter_Direct) -ErrorVariable Err -ErrorAction SilentlyContinue

   foreach($InDirectReport in $curObject_Indirect)
   {
      $Indireto = ($InDirectReport.ResourceManagementObject.ResourceManagementAttributes | Where-Object {$_.AttributeName -eq "DisplayName"}).Value
      if($Indireto.Length -gt 1)
      {
         $arrayIndireto += $Indireto
      }
   }
}
write-host ""
write-host "Estas pessoas reportam indiretamente a $ManagerName"
foreach($IndirectReport in $arrayIndireto)
   {
      write-host " --" $IndirectReport
   }
write-host ""
write-host ""

Trap
{
   Throw $_.Exception.Message
   Exit 1
}

Até Breve!!!