2016-01-26 20 views
5

Sto cercando di ottenere il nome del gruppo, gestito per nome e gestito via e-mail in una query PowerShell simile a questa.Get-ADGroup - Nome gruppo, Nome gestito e indirizzo e-mail

Get-ADGroup -filter {Name -like "*Admins" } 

L'output dovrebbe apparire qualcosa di simile a:

Group Name | Managed By Name | Managed By Email 

Il problema che sto avendo è con l'adesione Get-ADGroup e Get-ADUser. In SQL questo "join" sarebbe accaduto su get-adgroup.managedby = get-aduser.distinguishedname. So che non è così che funziona in Powershell, ho pensato di buttare fuori un esempio di quello che sto cercando di fare.

Qualsiasi aiuto sarebbe accolto e apprezzato.

risposta

4

vedo @Mathias R. Jessen mi ha battuto ad esso, ma ecco quello che avevo:

Get-ADGroup -filter {Name -like "*IT*" } -Properties managedBy | 
ForEach-Object { ` 
$managedBy = $_.managedBy; 

if ($managedBy -ne $null) 
{ 
$manager = (get-aduser -Identity $managedBy -Properties emailAddress); 
$managerName = $manager.Name; 
$managerEmail = $manager.emailAddress; 
} 
else 
{ 
$managerName = 'N/A'; 
$managerEmail = 'N/A'; 
} 

Write-Output $_; } | 
Select-Object @{n='Group Name';e={$_.Name}}, @{n='Managed By Name';e={$managerName}}, @{n='Managed By Email';e={$managerEmail}} 
+0

Grazie per la tua risposta @dugas, sembra che il primo indirizzo email si propaga attraverso i risultati. – Rob

+0

@Rob - Aveva un errore di battitura. Ho anche aggiornato per verificare null gestito da. – dugas

+0

Sono stato in grado di modificare la query per soddisfare le mie esigenze. Grazie per l'assistenza! – Rob

2

Si può fare in questo modo:

$Groups = Get-ADGroup -Filter { Name -like "*Admins" } -Properties managedBy,mail 
$Groups |Select-Object Name,@{Name='ManagedBy';Expression={(Get-ADUser $_.managedBy).Name}},Mail 

Il @{} sintassi dopo Select-Object è conosciuto come un calculated property.


Si potrebbe anche tubi ai gruppi di ForEach-Object e chiamare Get-ADUser all'interno del scriptblock processo:

Get-ADGroup -Filter {Name -like "*Admins"} -Properties managedBy,mail |ForEach-Object { 
    # Find the managedBy user 
    $GroupManager = Get-ADUser -Identity $_.managedBy 

    # Create a new custom object based on the group properties + managedby user 
    New-Object psobject -Property @{ 
     Name  = $_.Name 
     ManagedBy = $GroupManager.Name 
     Email  = $_.mail 
    } 
} 
+0

Nota questo otterrà l'indirizzo di posta del gruppo, mentre pensavo che l'OP volesse l'indirizzo di posta del manager di gruppo. – dugas

+0

@Mathias R. Jessen - L'indirizzo di posta elettronica estratto è l'email per il gruppo, non per l'utente Managed By. – Rob

+0

Sono sicuro di aver visto bravi duplicati per questo. – Matt

0

vorrei qualcosa di fare in questo modo:

# Get all groups into a variable 
$Group = Get-ADGroup -Filter {Name -like "*Admin*"} | Select-Object -expandProperty Name 
    foreach ($Groups in $Group){ 
    # Get ManagedBy name for each group (If ManagedBy is empty group wil not be listed) 
    $User = Get-ADGroup $Groups -Properties * | Select-Object -ExpandProperty ManagedBy 
    foreach ($Users in $User){ 
     # Get Name and EmailAddress for each User 
     $Name = Get-ADUser $Users | Select-Object -ExpandProperty Name 
     $Email = Get-ADUser $Users -Properties * | Select-Object -ExpandProperty EmailAddress 
    # Write output 
    Write-Host $Groups "," $Name "," $Email 
    } 
} 

Spero che questo aiuti.

+0

Non fare '-Properties *' estrae tutte le proprietà dell'oggetto. Sono molti dati inutili. Basta tirare quello che vuoi e non usare '*'. Fai domande multiple quando non ne hai bisogno. – Matt

+0

Thx per informazioni :) – questhome