2016-08-25 34 views
0

ここに私が直面している問題があります。私はグループ変数を調べています。それは情報を引き出すが、行ごとには表示しない。代わりに、時にはグループメンバーの前に最後のグループ情報が表示され、時には後に表示されます。プロセスをサブプロセスに落としてから次の行に進み、処理が速くなるようです。私は単純なものを見逃していることを知っている。コードは次のとおりです。powershellで前のコマンドが完了するまで待ちます

foreach ($Groups in $Groups) { 
    Write-Host "---------- Group Info ----------" -ForegroundColor Yellow 
    $TempGroup = $Groups 
    $GroupInfo = Get-ADGroup -Filter "name -like '$TempGroup'" -Properties *  
    $GroupInfo | select Name,GroupScope,GroupCategory,mail,Created,Modified,DistinguishedName,Description | sort name 

    write-host "---------- Members ----------" -ForegroundColor Green 
    Get-ADGroupMember -Identity $GroupInfo.samaccountname -Recursive | select name,samaccountname,description | sort name | ft -AutoSize 

    write-host "---------- Nested Groups ----------" -ForegroundColor Green 
    Get-ADPrincipalGroupMembership -Identity $GroupInfo.samaccountname | select name,GroupScope,GroupCategory | sort name | ft -AutoSize | Wait-Job 

} 

グループは配列です。

答えて

3

はあなたに奇妙な結果を与えることができます。 Write-Hostは、ホスト(コンソール)に直接書き込み、返されたオブジェクトはオブジェクトをフォーマットしてコンソール(デフォルト出力)に出力するOut-Default(隠しコマンドレット)に達するまでパイプラインを介して送信されます。

この遅延を避けるには、オブジェクトを直接Out-Hostにパイプします。試してみてください:それは、以前のパイプラインのコマンドレットからジョブ・オブジェクトを受け取ったことがないので

また
foreach ($Group in $Groups) { 
    Write-Host "---------- Group Info ----------" -ForegroundColor Yellow 
    $TempGroup = $Group 
    $GroupInfo = Get-ADGroup -Filter "name -like '$TempGroup'" -Properties *  
    $GroupInfo | select Name,GroupScope,GroupCategory,mail,Created,Modified,DistinguishedName,Description | sort name | Out-Host 

    write-host "---------- Members ----------" -ForegroundColor Green 
    Get-ADGroupMember -Identity $GroupInfo.samaccountname -Recursive | select name,samaccountname,description | sort name | ft -AutoSize | Out-Host 

    write-host "---------- Nested Groups ----------" -ForegroundColor Green 
    Get-ADPrincipalGroupMembership -Identity $GroupInfo.samaccountname | select name,GroupScope,GroupCategory | sort name | ft -AutoSize | Out-Host 

} 

...

  1. Wait-Jobはここに何もしません。
  2. foreach-loopで現在のオブジェクトと配列に同じ変数を使用しています。 PowerShellがループ内の現在の項目への参照を理解しているかどうかはわかりませんが、少なくともコードを読みにくくしています。
+0

ありがとうございます。「アウトホスト」は意味があります。これはかなり意味がありませんが、進行中の作業です。私が '$ tempgroup'に' $ groups'を落とすのは、PowerShellがすべての配列変数を 'groupinfo'検索に落としてエラーを出したり、奇妙な結果を出すのが好きだからです。このようにすると、現在のアイテムだけがドロップされ、検索されます。私は検索のために '$ tempgroup'の周りに*を追加するのを忘れていました。私はここに投稿する前に実験をしていたので、待っています。再びありがとう – David

+0

問題ありません。 Btw。私は '$ tempgroup'を意味しませんでした。 '$ group in $ groups '、'($ g in group) 'またはこれに類するものであったはずです。 –

0

、問題になる可能性が私はSHUREていないんだけど、私は、foreachの($のグループで$グループを)考える

あなたは(グループで$グループ){

}

をするforeachを使用する必要があります以上のPowerShellの構文でそれを行う:キャッチされていないオブジェクトのデフォルトの出力でWrite-Hostをミキシング

$Groups | Foreach{ 

Write-Host "---------- Group Info ----------" -ForegroundColor Yellow 
$TempGroup = $_ 
$GroupInfo = Get-ADGroup -Filter "name -like '$TempGroup'" -Properties *  
$GroupInfo | select Name,GroupScope,GroupCategory,mail,Created,Modified,DistinguishedName,Description | sort name 

write-host "---------- Members ----------" -ForegroundColor Green 
Get-ADGroupMember -Identity $GroupInfo.samaccountname -Recursive | select name,samaccountname,description | sort name | ft -AutoSize 

write-host "---------- Nested Groups ----------" -ForegroundColor Green 
Get-ADPrincipalGroupMembership -Identity $GroupInfo.samaccountname | select name,GroupScope,GroupCategory | sort name | ft -AutoSize | Wait-Job 

} 
関連する問題