Exchange Powershell 脚本循环
Exchange Powershell script looping
我有一个脚本,我经常在工作中使用它来显示用户帐户上所有活动的同步设备。我需要一个启用或禁用 Activesync 的用户列表,所以我编辑了第一个脚本。但是现在,它循环了很多次,如果我放置 -hidetableheadders,它会循环更多次。导致循环的这段代码有什么问题?我会把我需要帮助的代码放在第一位,然后我会把我从下面复制的工作代码放在上面。
我认为问题出在 "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
这是文件的输出,以 Matt 为例。我缩短了第一组,但在第二组中包含了整个 return。当我 运行 命令时得到的日志,return 是 OU 中每个用户的完整列表,据我所知,而不仅仅是列表中的用户。这是因为在命令中选择了两次 ou 吗?
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
我编辑了命令,得到了这个 return,这就是我的提示,它 return 为每个用户计算一次结果,我只需要一次结果。我包括要显示的整个结果集,用户 Sharla 不在它下面的 returned 列表中。
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
}
}
这可能不是全部问题,但肯定是其中很大一部分
$aSyncUser = Get-CASMailbox -organizationalunit "OU=$OU,OU=Hosted Exchange Customers,DC=ThisIsMyDC,DC=local" | where { $_.ActiveSyncEnabled -eq 'True'} | ft name, activesyncenabled -autosize
- 您没有获得单个用户。每次通过时,您都会在该 OU 中获得 all 用户。我无法想象那是你想要的。
- 您对 Format-Table 的使用只是在询问后续问题。在这里查看我对该主题的回答
I needed a list of Activesync enabled or disabled users
那么所有用户呢?不确定为什么要在循环外搜索 CAS 邮箱以在循环内的不同 OU 中再次搜索。
我有一个脚本,我经常在工作中使用它来显示用户帐户上所有活动的同步设备。我需要一个启用或禁用 Activesync 的用户列表,所以我编辑了第一个脚本。但是现在,它循环了很多次,如果我放置 -hidetableheadders,它会循环更多次。导致循环的这段代码有什么问题?我会把我需要帮助的代码放在第一位,然后我会把我从下面复制的工作代码放在上面。
我认为问题出在 "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
这是文件的输出,以 Matt 为例。我缩短了第一组,但在第二组中包含了整个 return。当我 运行 命令时得到的日志,return 是 OU 中每个用户的完整列表,据我所知,而不仅仅是列表中的用户。这是因为在命令中选择了两次 ou 吗?
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
我编辑了命令,得到了这个 return,这就是我的提示,它 return 为每个用户计算一次结果,我只需要一次结果。我包括要显示的整个结果集,用户 Sharla 不在它下面的 returned 列表中。
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
}
}
这可能不是全部问题,但肯定是其中很大一部分
$aSyncUser = Get-CASMailbox -organizationalunit "OU=$OU,OU=Hosted Exchange Customers,DC=ThisIsMyDC,DC=local" | where { $_.ActiveSyncEnabled -eq 'True'} | ft name, activesyncenabled -autosize
- 您没有获得单个用户。每次通过时,您都会在该 OU 中获得 all 用户。我无法想象那是你想要的。
- 您对 Format-Table 的使用只是在询问后续问题。在这里查看我对该主题的回答
I needed a list of Activesync enabled or disabled users
那么所有用户呢?不确定为什么要在循环外搜索 CAS 邮箱以在循环内的不同 OU 中再次搜索。