包含 Get-ADUser 和过滤器的 ForEach-Object 循环
ForEach-Object loop containing Get-ADUser and filter
我公司有一个脚本来处理 O365 的许可证,目前它为所有用户分配同一个国家,例如
$Location = "US"
$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$UPN = $E2Users[$Counter].SamAccountName + "@company.com"
Set-MsolUser -UserPrincipalName $UPN -UsageLocation $Location
##lots of other code
我需要检索每个用户的国家/地区并使用该国家/地区而不是字符串。我已经设置了一个小测试,以通过使用输出来查看结果来确保我拥有正确的国家/地区,但是我似乎无法全神贯注以使其正常工作。我在另一个论坛看到了$username = $_ 并尝试使用它。
$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$username = $_
$Location = Get-ADUSer -filter {samaccountname -like "*$username*"} -properties * | Select country
write-output $Location
}
或者我什至需要过滤器吗?使用以下内容可以输出国家/地区,但如何确保它们与每个用户正确匹配。某些生成的行使用国家/地区或 c 时有空白,并且在检查用户帐户时,这些属性具有值。
$E2Users = Get-ADGroupMember lg.o365.Office.PlanK1 | Select SamAccountName
$E2Users | ForEach-Object{
$Location = Get-ADUSer -filter * -properties * | Select country
write-output $Location
}
最终结果如下所示
$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$UPN = $E2Users[$Counter].SamAccountName + "@company.com"
$Location = Get-ADUSer -filter {not sure what to use} -properties * | Select country
Set-MsolUser -UserPrincipalName $UPN -UsageLocation $Location
##lots of other code
我错过了什么,不明白。感谢您的帮助。
$E2Users = Get-ADGroupMember lg.o365.Office | Select -ExpandProperty SamAccountName
$E2Users | ForEach-Object {
$username = $_ + '@company.com'
$Location = Get-ADUSer -filter 'samaccountname -eq "$_"' -properties country | Select country
Set-MsolUser -UserPrincipalName $username -UsageLocation $Location
}
如果我对您的要求理解正确,请随时询问是否有不清楚的地方。
这里的问题是 $E2Users
数组的每个成员都是一个对象,其中包含一个名为 samaccountname
的 属性,然后您将该对象分配给您的 $username 变量循环,不能用作过滤器。有几种方法可以修复它,但最简单的可能就是扩展 属性,因此将第一行更改为
$E2Users = Get-ADGroupMember lg.o365.Office | Select -expandproperty SamAccountName
我也希望你的过滤器从 -like 到 -eq 并删除它周围的“**”,因为它们不是必需的。
我公司有一个脚本来处理 O365 的许可证,目前它为所有用户分配同一个国家,例如
$Location = "US"
$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$UPN = $E2Users[$Counter].SamAccountName + "@company.com"
Set-MsolUser -UserPrincipalName $UPN -UsageLocation $Location
##lots of other code
我需要检索每个用户的国家/地区并使用该国家/地区而不是字符串。我已经设置了一个小测试,以通过使用输出来查看结果来确保我拥有正确的国家/地区,但是我似乎无法全神贯注以使其正常工作。我在另一个论坛看到了$username = $_ 并尝试使用它。
$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$username = $_
$Location = Get-ADUSer -filter {samaccountname -like "*$username*"} -properties * | Select country
write-output $Location
}
或者我什至需要过滤器吗?使用以下内容可以输出国家/地区,但如何确保它们与每个用户正确匹配。某些生成的行使用国家/地区或 c 时有空白,并且在检查用户帐户时,这些属性具有值。
$E2Users = Get-ADGroupMember lg.o365.Office.PlanK1 | Select SamAccountName
$E2Users | ForEach-Object{
$Location = Get-ADUSer -filter * -properties * | Select country
write-output $Location
}
最终结果如下所示
$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$UPN = $E2Users[$Counter].SamAccountName + "@company.com"
$Location = Get-ADUSer -filter {not sure what to use} -properties * | Select country
Set-MsolUser -UserPrincipalName $UPN -UsageLocation $Location
##lots of other code
我错过了什么,不明白。感谢您的帮助。
$E2Users = Get-ADGroupMember lg.o365.Office | Select -ExpandProperty SamAccountName
$E2Users | ForEach-Object {
$username = $_ + '@company.com'
$Location = Get-ADUSer -filter 'samaccountname -eq "$_"' -properties country | Select country
Set-MsolUser -UserPrincipalName $username -UsageLocation $Location
}
如果我对您的要求理解正确,请随时询问是否有不清楚的地方。
这里的问题是 $E2Users
数组的每个成员都是一个对象,其中包含一个名为 samaccountname
的 属性,然后您将该对象分配给您的 $username 变量循环,不能用作过滤器。有几种方法可以修复它,但最简单的可能就是扩展 属性,因此将第一行更改为
$E2Users = Get-ADGroupMember lg.o365.Office | Select -expandproperty SamAccountName
我也希望你的过滤器从 -like 到 -eq 并删除它周围的“**”,因为它们不是必需的。