2016-09-21 4 views
0

Я написал приложения DotNet Forms, которые используют автоматизацию PowerShell для создания и изменения пользователей в локальном AD, локальном Exchange, Azure AD и O365 для соответствия отчетам, предоставленным HR. Это уже несколько лет используется клиентом и отлично работает.azure AD powerShell edit manager

В коде используется Azure Active Directory Module для Windows PowerShell (MSOnline - MSOL) для просмотра и редактирования пользователей в Azure AD. Первоначально я использовал MSOL версии 8073.4, но я с тех пор повышен до MSOL версии 1.1.166.0 (см http://social.technet.microsoft.com/wiki/contents/articles/28552.microsoft-azure-active-directory-powershell-module-version-release-history.aspx)

Например, я хотел бы использовать следующий PowerShell, чтобы изменить название пользователя:

Import-Module MSOnline 
$Cred = Get-Credential 
Connect-MSOLService -Credential $Cred 
Set-MSOLUser -UserPrincipalName [email protected] -Title 'Deliverer of presents' 

Everything было в порядке, пока меня не попросили продлить код, чтобы обновить каждый атрибут «ID менеджера» Azure AD. Легко я подумал! Мне просто нужно обновить поле «ID менеджера» пользователя (которое является идентификатором объекта учетной записи Azure AD менеджера), так же, как я обновляю заголовок .....

Er, no. Я не могу найти способ изменить поле менеджера. Я перешел на документацию MSDN и не могу найти какой-либо метод для этого:

Итак, я рассмотрел новые модули AD2 для Azure, которые находятся в предварительном просмотре на данный момент (упомянутые выше в URL истории релиза) и можно загрузить из галереи PowerShell (найдите «AzureADPreview»). В конечном итоге они заменят старые командлеты MSOL и очень похожи на существующие модули Azure PowerShell (для создания виртуальных машин и т. Д.). Это обеспечит поддержку для установки «менеджер ID» пользователя с помощью команды

Set-AzureADUserManager 

и я попробовал это, и это работает, так что я думал, что я обновить мое приложение, чтобы использовать новые v2 API, вместо API v1 (MSOL).

К сожалению, я обнаружил, что

Set-AzureADUser 

команда (используется для установки атрибутов, таких как название работы) полностью нарушена в v2.0.0.1 и завершается с ошибкой

«исключение было брошенный мишенью вызова "

для любой комбинации, которую я пробую. Я сообщил об этом разработчикам через галерею PowerShell.

К счастью, я обнаружил, что предыдущая версия 1.1.167.0 этих модулей работает нормально, поэтому я использую эту версию и теперь могу успешно создавать пользователей, изменять пользователей, настраивать «идентификатор менеджера» пользователя, но я не могу понять, как установить лицензии (например, O365_BUSINESS_PREMIUM). Документация для команды Set-AzureADUserLicense в значительной степени отсутствует, и я не смог решить, как ее использовать.

Я думаю, что мне нужно сделать следующее:

# Create an object which contains the individual license 'x' I want to add 
# The available license SkuIDs can be read from Get-AzureADSubscribedSku 
$MySingleLicenseToAdd = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense 
$MySingleLicenseToAdd.SkuID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 

# Create a licenses object which is assigned the individual licenses I want to add or remove 
$MyLicensesToAddOrRemove = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses 
$MyLicensesToAddOrRemove.AddLicenses = $MySingleLicenseToAdd 
$MyLicensesToAddOrRemove.RemoveLicenses = $Null 

# Perform the license action against the specified user 'y' 
Set-AzureADUserLicense -ObjectId 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyy' -AssignedLicenses $MyLicensesToAddOrRemove 

, но он не на второй строке кода, говоря, что «SkuID» является полем только для чтения.

Поэтому я не могу использовать API V1 (MSOL), потому что не могу найти способ обновить поле «Менеджер ID» пользователя. Я не могу использовать API-интерфейсы V2, потому что я не могу найти способ назначить лицензии (и это в предварительном просмотре, поэтому не рекомендуется использовать в прямом эфире)

Мой текущий план - вернуться к использованию API V1, но затем используйте API-интерфейсы V2 для обновления только поля «Менеджер ID», но это вряд ли идеальное решение (потому что я буду дважды подписаться на Azure с двумя разными API-интерфейсами), поэтому мне было интересно, могут ли кто-нибудь дать какие-либо предложения?

  1. Мое предпочтение было бы использовать API-интерфейсы v1 (MSOL), чтобы обновить поле «Менеджер ID».
  2. Моим вторым преимуществом было бы использовать API v2 и узнать, как назначать лицензии.
  3. Мой третий предпочтение все остальное;)

Я прочитал одну статью об использовании REST API, непосредственно, но это был путь тяжелый, и я бы предпочел, чтобы избежать и придерживаться с API Azure PowerShell, если это возможно ,

Извините за вопрос о looooong, но я пытался указать некоторый контекст, почему я пытаюсь использовать V2 API.

Update (23/09/2016):

AzureADPreview 2.0.0.2 была выпущена только и исправляет проблему с Set-AzureADUser :), но, к сожалению, частично рвёт Set-AzureADUserManager :(

Такая же проблема с лицензиями с этой новой версией

ответ

0

Спасибо, что ответили. Роб.

Код, указанный вами, совпадает с тем, что я пытался (см. Код в моем исходном вопросе), за исключением того, что вы извлекаете SkuID из существующего пользователя.

С тех пор как были выпущены две новые версии AzureADPreview (2.0.0.7 и 2.0.0.17), это побудило меня попробовать еще раз с новыми версиями AzureADPreview, а также с исходными версиями, которые были доступны, когда я был первоначально опубликован.

Мои результаты выглядят следующим образом:

2.0.0.1: Не работает. Ошибка только для чтения.

2.0.0.2: Не работает. Ошибка только для чтения.

2.0.0.7: Работы

2.0.0.17: Работы

Так в основном это была ошибка в оригинальной версии AzureADPreview, но Microsoft уже устранили его.

Все работает сейчас.

+0

Пожалуйста, не добавляйте «спасибо» в качестве ответа. Вместо этого ** [принять ответ] (http://stackoverflow.com/help/accepted-answer) **, который вы нашли наиболее полезным. - [Из обзора] (/ review/low-quality-posts/14240288) –

+0

Это была ошибка. Я не понял, что сделал комментарий (новичок в Stack Overflow), но я удалю комментарий. Я не знал, что ответить, потому что Роб просто предоставил тот же самый код, который я пытался (поэтому он не ответил на мой вопрос). Затем я обнаружил, что исправление было фактически в новой версии 2.0.0.7. Поэтому мой собственный ответ - это правильный ответ. Могу ли я присудить себе ответ (это даже приемлемо?) –

+0

Полностью приемлемо, если ответ, который вы написали, был способом, которым вы решили проблему. –

0

Вот пример того, как можно использовать командлет Set-AzureADuserLicense для установки лицензии для пользователя.

Пожалуйста, дайте мне знать, если это уточняется.

# Get the License SkuId from a template user that we want to apply to the new user 
$licensedUser = Get-AzureADUser -ObjectId "[email protected]" 
# Get the new User we want to apply the license too 
$user = Get-AzureADUser -ObjectId "[email protected]" 
# Create the new License object 
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense 
$license.SkuId = $licensedUser.AssignedLicenses.SkuId 
# Create the Licenses Table and add the license from above 
$licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses 
$licenses.AddLicenses = $license 
# Apply the license to the new user 
Set-AzureADUserLicense -ObjectId $user.ObjectId -AssignedLicenses $licenses 

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

  • Нет связанных вопросов^_^