2016-12-02 4 views
0

Ich habe ein Skript, das ich häufig bei der Arbeit verwendet, um alle aktiven Sync-Geräte auf einem Benutzerkonto anzuzeigen. Ich brauchte eine Liste der aktivierten oder deaktivierten Activesync-Benutzer, also habe ich das erste Skript bearbeitet. Jetzt wird es jedoch mehrfach wiederholt, und es wiederholt sich noch mehr, wenn ich -hide table-headders setze. Was habe ich falsch in diesem Code, der die Schleife verursacht? Ich werde den Code, mit dem ich Hilfe brauche, zuerst einsetzen, und ich werde den Arbeitscode, den ich von unten kopiert habe, unterbringen.Exchange Powershell Skript Schleife

Ich glaube, das Problem liegt in der "foreach" Block, aber egal was ich darin ändern, sogar entfernen, ist die Datei leer.

Activesync aktiviert Code:

#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 

Originalcode:

#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 

Hier ist die Ausgabe der Datei, für die ein Beispiel für Matt. Ich habe den ersten Satz verkürzt, aber die ganze Rückkehr für den zweiten Satz eingeschlossen. Das Protokoll, das ich beim Ausführen des Befehls erhalte, gibt die vollständige Liste für jeden Benutzer in der Organisationseinheit von dem zurück, was ich feststellen kann, und nicht nur diejenigen, die in dieser Liste enthalten sind. Liegt das an der doppelten Auswahl im Befehl?

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 

ich den Befehl bearbeitet, und bekam diese Rückkehr, das, was ich abstoßend gekippt ist, dass es die Ergebnisse einmal für jeden Benutzer zurückkehrte, ich brauche nur die einmal Ergebnisse. Ich gebe die gesamte Ergebnismenge ein, um anzuzeigen, der Benutzer Sharla ist nicht in der zurückgegebenen Liste darunter.

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 

Matts Beratung Taking habe ich über $ user.samaccountname in der Linie zurück. Das hat den Output gebrochen, also musste ich und es rein, aber jetzt gibt es mir genau das, was ich brauchte.

#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

Folgen Sie den Anweisungen in [der SSCCE] (http://sscce.org/). –

+0

Sorry Bill, ich habe hinzugefügt, wo ich denke, dass das Problem auftritt. Ich weiß nicht, warum ich das anfangs nicht gesagt habe. – Tekwhat

+0

Es ist nicht genug zu sagen, wo Sie das Problem vermuten. Beginnen Sie erneut und schreiben Sie ein kleines Skript, das nur die minimale Menge an Code enthält, die zur Reproduktion des Problems benötigt wird. Lesen Sie sorgfältig den Link, den ich gepostet habe. –

Antwort

0

Dies könnte nicht das ganze Problem sein, aber es ist sicherlich ein großer Teil davon

$aSyncUser = Get-CASMailbox -organizationalunit "OU=$OU,OU=Hosted Exchange Customers,DC=ThisIsMyDC,DC=local" | where { $_.ActiveSyncEnabled -eq 'True'} | ft name, activesyncenabled -autosize 
  1. Sie einen einzelnen Benutzer nicht bekommen. Sie erhalten alle Benutzer in dieser Organisationseinheit bei jedem Durchgang. Ich kann mir nicht vorstellen, dass du das wolltest.
  2. Ihre Verwendung von Format-Tabelle fragt nur nach Problemen auf der Straße. Werfen Sie einen Blick auf meine Antwort zu diesem Thema hier How can I store output from Format-Table for later use

ich eine Liste von Activesync Bedarf aktiviert oder deaktiviert Benutzer

So alle Benutzer dann? Nicht sicher, warum Sie nach CAS-Postfächern außerhalb der Schleife suchen, um in einer anderen Organisationseinheit innerhalb der Schleife erneut zu suchen.

+0

Die Idee besteht darin, eine Liste aller Benutzer in einer Organisationseinheit zu erstellen, für die Activesync aktiviert ist.Die Ergebnisse, die ich bekomme, sind korrekt, aber es wiederholt sich für jeden Benutzer. Ich werde an einem Beispiel vorbeikommen, wenn ich Montag zur Arbeit zurückkomme, um Ihnen zu zeigen, wovon ich rede. – Tekwhat

+0

Matt, ich habe das OP mit dem Beispiel aktualisiert. – Tekwhat

+0

@Tekwhat Hast du meine Antwort gelesen? Insbesondere Punkt 1. Sind alle Benutzer in dieser Organisationseinheit zurückgegeben? – Matt