我的公司有一个脚本来处理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
}
或者我甚至需要过滤器?使用以下内容为我提供了国家/地区的输出,但如何确保它们与每个用户正确匹配。某些结果行使用country或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
我缺少什么而不理解。谢谢你的帮助。
答案 0 :(得分:0)
$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
}
如果我理解了您的要求,请随时询问是否有不明确的事情。
答案 1 :(得分:0)
这里的问题是$E2Users
数组的每个成员都是一个对象,它有一个名为samaccountname
的属性,然后你将该对象分配给循环中的$ username变量,这个变量无法使用作为过滤器。有几种方法可以修复它,但最简单的方法可能就是扩展属性,所以将第一行更改为
$E2Users = Get-ADGroupMember lg.o365.Office | Select -expandproperty SamAccountName
我也有机会将你的过滤器从-like转换为-eq并在它周围放下“**”,因为它们不是必需的。