2016-11-28 2 views
0

Моей компании имеет скрипт для обработки лицензий на O365, и ток присваивает ту же страну для всех пользователей, таких какцикла ForEach-Object, содержащий Get-ADUser и фильтр

$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 

Мне нужно, чтобы получить страну каждого пользователя и использовать это, а не строку. Я настроил небольшой тест, чтобы убедиться, что у меня есть правильная страна, используя out-put, чтобы увидеть результаты, однако я не могу показаться, что обволакиваю ее, чтобы заставить ее работать. Я видел $ 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 

Что я упускаю и не понимая. Спасибо за любую помощь.

ответ

0

Проблема заключается в том, что каждый член массива $E2Users является объектом с единственным свойством, называемым samaccountname, а затем вы назначаете этот объект переменной $ username в вашем цикле, которая не может использоваться в качестве фильтра. Есть несколько способов, чтобы исправить это, но самый простой, вероятно, просто расширить собственность, поэтому изменить первую строку

$E2Users = Get-ADGroupMember lg.o365.Office | Select -expandproperty SamAccountName

Я также шанс свой фильтр из -как в -eq и отбросьте «**» вокруг него, поскольку они не требуются.

+1

Часть $ E2Users работает нормально. Вся проблема, с которой я сталкиваюсь, получает переменную $ Location. Поскольку цикл выполняется для каждого пользователя, я хочу получить страну или c, чтобы затем назначить $ Location, поэтому, когда запущен Set-MsolUser, он устанавливает правильную -UsageLocation. Если это имеет смысл? Это все о линии $ Location = Get-ADUSer -filter ........... Простой как $ E2Users | ForEach-Object { $ UsageLocation = Get-ADUSer -filter * -properties * | Выберите c –

+0

Вам нужно будет добавить '-ExpandProperty' в select, который создает' $ E2users', или указать '$ username = $ _. Samaccountname', чтобы ваш цикл работал правильно. Вам нужно будет сделать то же самое с «Выбор страны» в вашем цикле. когда вы делаете выделение, поскольку вы создаете объект с одним свойством, вам нужно, чтобы свойство было присвоено переменной. –

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 
} 

Если я правильно понял ваш запрос, не стесняйтесь спрашивать, не ясно ли что-то.

Смежные вопросы