2016-01-26 14 views
5

Tôi đang tìm kiếm tên nhóm, được quản lý theo tên và được quản lý bằng email trong truy vấn PowerShell tương tự như vậy.Get-ADGroup - Tên nhóm, Tên ManagedBy và Email

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

Kết quả sẽ giống tương tự như:

Group Name | Managed By Name | Managed By Email 

Vấn đề tôi đang gặp là với việc gia nhập Get-ADGroupGet-ADUser. Trong SQL, "tham gia" này sẽ xảy ra trên get-adgroup.managedby = get-aduser.distinguishedname. Tôi biết đó không phải là cách nó hoạt động trong Powershell, chỉ nghĩ rằng tôi sẽ ném ra một ví dụ về những gì tôi đang cố gắng làm.

Mọi trợ giúp đều được hoan nghênh và đánh giá cao.

Trả lời

4

tôi thấy @Mathias R. Jessen đánh bại tôi vào nó, nhưng đây là những gì tôi có:

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

Cảm ơn bạn đã trả lời @dugas, nó xuất hiện địa chỉ email đầu tiên được truyền thông qua kết quả. – Rob

+0

@Rob - Đã có lỗi đánh máy. Tôi cũng cập nhật để kiểm tra null được quản lý bởi. – dugas

+0

Tôi đã có thể tinh chỉnh truy vấn để phù hợp với nhu cầu của mình. Cảm ơn sự trợ giúp của bạn! – Rob

2

Bạn có thể làm điều đó như thế này:

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

Cú pháp @{} sau Select-Object được biết đến như một calculated property.


Bạn có thể cũng ống nhóm để ForEach-Object và gọi Get-ADUser bên trong quá trình scriptblock:

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

Lưu ý điều này sẽ nhận được địa chỉ thư của nhóm, trong khi tôi nghĩ rằng OP muốn địa chỉ thư của người quản lý nhóm. – dugas

+0

@Mathias R. Jessen - Địa chỉ email được kéo là email cho nhóm chứ không phải cho người dùng Được quản lý bởi người dùng. – Rob

+0

Tôi chắc chắn rằng tôi đã thấy những điều tốt đẹp cho việc này. – Matt

0

Tôi sẽ làm như sau:

# 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 
    } 
} 

Hy vọng điều này sẽ hữu ích.

+0

Không làm '-Properties *' nó kéo tất cả các thuộc tính của đối tượng. Đó là rất nhiều dữ liệu vô ích. Chỉ cần kéo những gì bạn muốn và không sử dụng '*'. Bạn thực hiện nhiều truy vấn khi không cần. – Matt

+0

Thx để biết thông tin :) – questhome

Các vấn đề liên quan