2016-12-02 22 views
0

私は、仕事中に頻繁に使用するスクリプトを使用して、すべてのアクティブな同期デバイスをユーザーアカウントに表示しています。私はActiveSyncの有効または無効のユーザーの一覧が必要なので、最初のスクリプトを編集しました。しかし、今度は何度もループしています。もし私がヒットセット可能なヘッダーを置くと、それはさらに多く回ります。ループを引き起こしているこのコードで何が間違っていますか?私は最初に助けが必要なコードを入れて、それからコピーした作業コードを下に置きます。Exchange Powershellスクリプトのループ

私はこの問題が "foreach"ブロックにあると信じていますが、私がそれを変更してもそれを削除してもファイルは空です。

ActiveSyncが有効コード:

#Settings for file ouput 
$fLocation = "D:\Exchange Reports\" 

#Read OU imput from console: 
$OU = Read-Host -Prompt "Input the OU name to search: (0202 - Dev Bank)" 

#lookup users based on the OU 
$Ulist = Get-CASMailbox -organizationalunit "OU=$OU,OU=Hosted Exchange Customers,DC=CSIDMZ,DC=local" -ResultSize Unlimited 


foreach ($user in $Ulist) 
    { 
     $aSyncUser = Get-CASMailbox -organizationalunit "OU=$OU,OU=Hosted Exchange Customers,DC=ThisIsMyDC,DC=local" | where { $_.ActiveSyncEnabled -eq 'True'} | ft name, activesyncenabled -autosize 

     if ($aSyncUser -ne $null) 
      { 
       $deviceID = $aSyncUser | out-string 
       $Content = "User: $user $deviceID" 
       Add-Content $fName $Content 
      } 

    } 

    write-host "The script completed successfully! The output file can be found at $fName" -ForeGroundColor Yellow 

オリジナルコードを:ここで

#Settings for file ouput 
$fLocation = "D:\Exchange Reports\" 

#Read OU imput from console: 
$OU = Read-Host -Prompt "Input the OU name to search: (0202 - Dev Bank)" 

#lookup users based on the OU 
$Ulist = get-mailbox -OrganizationalUnit "OU=$OU,OU=Hosted Exchange Customers,DC=ThisIsMyDC,DC=local" -ResultSize Unlimited 


foreach ($user in $Ulist) 
    { 
     $aSyncUser = get-activesyncdevice -mailbox $user.SAMAccountName -ErrorAction SilentlyContinue |ft DeviceID -HideTableHeaders 

     if ($aSyncUser -ne $null) 
      { 
       $deviceID = $aSyncUser | out-string 
       $Content = "User: $user $deviceID" 
       Add-Content $fName $Content 
      } 
    } 

    write-host "The script completed successfully! The output file can be found at $fName" -ForeGroundColor Yellow 

はマットのために、たとえば、ファイルの出力です。私は最初のセットを短縮しましたが、2回目のリターン全体を含めました。私がコマンドを実行するときに得られるログは、このリストにあるものだけでなく、OU内のすべてのユーザーの完全なリストを返すことができます。これはコマンドでouの選択が2回あるためですか?

User: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData 
Name    ActiveSyncEnabled 
----    ----------------- 
Judy X Langford    True 

User: Microsoft.PowerShell.Commands.Internal.Format.GroupStartData 
Name    ActiveSyncEnabled 
----    ----------------- 
Judy X Langford    True 

私は、これはそれがすべてのユーザーのために一度、結果を返していましたことを、私は一度だけの結果を必要とする私をひっくり返したものです、コマンドを編集して、このリターンを得ました。私は表示するように設定された結果全体を含めていますが、ユーザーSharlaはその下の返されたリストにありません。

User: Domain.local/Hosted Exchange Customers/This is my OU/Sharla x Ryan 
Name    ActiveSyncEnabled 
----    ----------------- 
Judy X Langford    True 
Sandy X Stuckey    True 
0718 test      True 
Shelby D Hansche    True 
Toni X Brooks     True 
Katie X Strain    True 
Monica Minter     True 
Chloe X Mims     True 
Jay X Davis     True 
Aaron Calvit     True 
Joe Nichols     True 
Sherry X Rice     True 
Tracey X Wardlaw    True 
Brad X Davis     True 
Chris X Lannom    True 
Haley X Burleson    True 
Cody X Deal     True 
Cris X Day     True 
Mitch X Stone     True 



User: Domain.local/Hosted Exchange Customers/This is my OU/Judy X Langford 
Name    ActiveSyncEnabled 
----    ----------------- 
Judy X Langford    True 

Mattのアドバイスを取って、$ user.samaccountnameについての行に追加しました。これは出力を壊したので、私はそれを持っていたが、今は私が必要とするものを夢中にしている。

#lookup users based on the OU 

Get-CASMailbox -OrganizationalUnit "OU=$OU,OU=Hosted Exchange Customers,DC=CSIDMZ,DC=local" -ResultSize unlimited | select name,activesyncenabled >>$fLocation+$OU+"_ActiveSyncEnabled.txt" 

foreach ($user in $Ulist) 
    { 
     $aSyncUser = get-activesyncdevice -mailbox $user.SAMAccountName -ErrorAction SilentlyContinue |ft name, activesyncenabled -HideTableHeaders 

     if ($aSyncUser -ne $null) 
      { 
       $deviceID = $aSyncUser | out-string 
       $Content = "User: $user $deviceID" 
       Add-Content $fName $Content 
      } 
    } 
+1

[the SSCCE](http://sscce.org/)のアドバイスに従ってください。 –

+0

申し訳ありませんビル、私はどこに問題が発生していると思うかを付け加えました。なぜ私はそれを最初に述べなかったのか分かりません。 – Tekwhat

+0

問題がどこにあるかを言うだけでは不十分です。最初からやり直して、問題を再現するのに必要な最小限のコードしか含まれていない小さなスクリプトを作成してください。私が投稿したリンクを注意深く読んでください。 –

答えて

0

これは全体の問題ではないかもしれませんが、それはあなたは、単一のユーザーを取得されていません確かにそれ

$aSyncUser = Get-CASMailbox -organizationalunit "OU=$OU,OU=Hosted Exchange Customers,DC=ThisIsMyDC,DC=local" | where { $_.ActiveSyncEnabled -eq 'True'} | ft name, activesyncenabled -autosize 
  1. の大部分です。あなたはすべてのパスでそのOUにすべてのユーザーを取得しています。私はそれがあなたが行っていたものだとは想像できません。
  2. Format-Tableを使用すると、問題が発生しているかどうかを確認するだけです。

How can I store output from Format-Table for later useここでそのトピックに関する私の答えを見ている私は、Activesyncを有効または無効ユーザのリスト

だから、すべてのユーザーが必要?ループ外のCASメールボックスを検索して、ループ内の別のOUで再度検索する理由を理解していない。

+0

考えられるのは、ActiveSyncを有効にしたOU内のすべてのユーザーの一覧を作成することです。私が得ている結果は正しいが、それはすべてのユーザーのためにそれ自身を繰り返す。私が月曜日に仕事に戻って、私が何を話しているかを示すために、私は過去の例を追い越します。 – Tekwhat

+0

Matt、私はこの例でOPを更新しました。 – Tekwhat

+0

@Tekwhatあなたは私の答えを読んだのですか?具体的には、1.すべてのユーザーがそのOUに返されますか? – Matt

関連する問題