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
}
}
Folgen Sie den Anweisungen in [der SSCCE] (http://sscce.org/). –
Sorry Bill, ich habe hinzugefügt, wo ich denke, dass das Problem auftritt. Ich weiß nicht, warum ich das anfangs nicht gesagt habe. – Tekwhat
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. –