web-dev-qa-db-ja.com

PowerShellを使用したOUによるOffice 365ユーザーの一括ライセンス

修正が複雑すぎるとは思わないことをしようとしています。私の最終目標:1つのAD OUにOffice 365の特定のライセンスを使用する必要がある特定のユーザーと、別のライセンスを取得する別のOUの別のユーザーがいます。

実行したいコマンドは次のとおりです。

Get-ADUser -Filter * -SearchBase "ou=test,dc=our,dc=domain,dc=edu" | Set-MsolUserLicense -AddLicenses ourorg:STANDARDWOFFPACK_IW_STUDENT

しかし、それは次の応答で失敗します:

Set-MsolUserLicense : The input object cannot be bound because it did not contain the information required to bind all mandatory parameters: ObjectId At line:1 char:111 + Get-ADUser -Filter * -SearchBase "ou=Test students,ou=Students,dc=campus,dc=org,dc=edu" | Set-MsolUserLicense <<<< -AddLicenses nwcu:STANDARDWOFFPACK_IW_STUDENT

個別に、これらのコマンドは両方とも機能します。 OU内のすべてのユーザーを選択できます。また、-UserPrincipalNameを指定してSet-MsolUserLicenseコマンドを手動で使用して、1人のユーザーにライセンスを付与することもできます。

これは、Get-ADUserがSet-MsolUserLicenseが探しているようなObjectIDを返さないためですか? Get-ADUserはObjectGUIDを返します。私がここで正しい方向に進んでいる場合、パイプ入力のためにこれらを一緒にマッピングする方法はありますか?

編集:これを行うための一般的な方法は、このためのCSVファイルのアップロードが含まれることを認識しており、これらのユーザーをCSVエクスポートできることはわかっていますが、OUにはすでにきちんと整頓されているので、ぜひ実行したいですこれで、可能であればインポート/エクスポートします。

前もって感謝します!

6
SteadH

For-eachループを使用して各ユーザーを列挙し、ライセンスを適用することは間違いありません。ループは.UserPrincipalNameクエリで返された各オブジェクトからGet-ADUserを呼び出す必要があります。Office365はライセンスを設定するときにその値を処理する必要があるためです。

Get-ADUser | %{ Set-MSOLUserLicense -UserPrincipalName $_.UserPrincipalName }

私はここで、あなたがあなたの質問で説明していると思う一般的なケースを説明するために私自身の答えを作成しました:あなたはすべての人に同じライセンスオプションを包括的に適用したくないです。

TechNetブログ この問題については非常に役立ちます。データ漏洩の理由で財務チームにSharePoint Online/OneDrive for Businessへのアクセスを許可したくない場合や、Lync/Skype for Businessを有効にしたくないコールセンターがある場合があります。

テナントに関する情報を取得するには、上部から始めます。

Get-MSOLAccountSku

これにより、テナントにあるライセンスパックが返されます。一般的なSKUには、ENTERPRISEPACKとDESKLESSPACKがあります。これらは、AccountSkuIdの下のyourorg:LICENSEPACKによってリストされます。

これらの各ライセンスパックでは、PowerShellを介して適用するときに、機能を無効にすることができることに注意してください(同様に、管理センターのオプションボックスをオン/オフにすることを選択できます)。

LicenseOptions

ライセンスオプションのこのサブセットを作成するには、新しい変数を作成し、New-MSOLLicenseOptionsコマンドレットを活用します:$LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE

(上記のオプションは上記のスクリーンショットに対応しています。私がプロビジョニングスクリプトから完全に引き抜いたと推測できます。)

最後に、これをForEachループのSet-MsolUserLicenseに関連付けることができます。

$LicOpt = New-MsolLicenseOptions -AccountSkuId "yourorg:ENTERPRISEPACK" -DisabledPlans OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,RMS_S_ENTERPRISE

Get-ADUser | %{ Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -AddLicenses "yourorg:ENTERPRISEPACK" -LicenseOptions $LicOpt }

いつものように、あなたのテナントは異なる場合があります。利用可能なオプションを見つけて適切に適用するために十分な情報を提供できたと思います!

2
blaughw