2017-12-11 7 views
0

場合は、次のコードを使用してPowerShellの返さない値が

import-module activedirectory 

$users = @("user1", "user2", "user3") 
$results = @() 

foreach($user in $users) { 
    $properties = @{ 
     Name = (get-aduser -Identity $user).Name 
     Manager = get-aduser (get-aduser -Identity $user -Properties manager).manager -properties displayName 
     DirectReports = get-aduser (Get-ADUser -Identity $user -Properties directreports).directreports -properties displayName 
    } 
    $results += New-Object psobject -Property $properties | select Name, Manager, DirectReports 
} 

$results 

のみUSER3実際に直接レポートを持っているので、それは彼のラインを3回印刷しています。しかし、user1とuser2の行は表示されません。 DirectReports列が空であっても、行を印刷するにはどうすればよいですか?

+0

テストケースを追加します。新しいオブジェクトを変数に割り当て、nullをテストします。 'If​​($ Null -eq $ Properties.DirectReports){$ Properties.DirectReports = ''}'空文字列 '$ Null'ではなく表示する例 – TheIncorrigible1

答えて

0

あなたは、マネージャーとDirectReportsラインでの問題、正しく実行されませんGet-ADUserコマンドレットを持っているあなたはそれを使用して3回、各プロパティの1、 も、get-aduser (Get-ADUser...).manager or directreportsは、Identityパラメータの有効な使用ではないかもしれない、それを使用あなたが管理者または直接報告の身元を持っていない場合、それは失敗するでしょう。

だから私はあなたが同じユーザのための行を繰り返して取得することはできませんので$ADUser = $nullは、変数のリセットを強制します。また、あなたが必要なプロパティで、一度ADUserを取得し、このようにそれを使用することを提案

$users = @("user1", "user2", "user3") 
$results = @() 

foreach($user in $users) { 
    $ADUser = $null 
    $ADUser = Get-ADUser $user -Properties Manager,DirectReports 
    if ($ADUser) { 
    $Row = "" | Select Name,Manager,DirectReports 
    $Row.Name = $ADUser.Name 
    $Row.Manager = $ADUser.Manager 
    $Row.DirectReports = $ADUser.DirectReports 
    $results += $Row 
    } 
} 

$results