无法使用 powershell 设置 O365 许可证
Unable to set up O365 license with powershell
我正在尝试使用 powershell 在 Office365 用户上设置许可证以供将来迁移。
为此,我首先将现有 users/licences 的列表(带有 powershell 脚本)放入 CSV 文件中。它看起来像这样:
Users,Licence
toto@mycompany.com,"MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEVISIO"
titi@mycompany.com,"MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEWORD"
tata@mycompany.com,"MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEEXCEL"
....
(有关信息,我确定许可证名称,因为我使用命令 Get-MsolAccountSku
获得了它们)
为了迁移的未来,我目前正在执行另一个脚本,通过获取有关 Licence 的信息,自动为现有用户设置许可证 CSV 文件的列
我是这样做的:
$csv = Import-Csv C:\output.csv
$toto = $csv[1].Licence
Set-MsolUserLicense -UserPrincipalName toto@mycompany.com -AddLicenses $toto
这是我的问题,当我启动这个脚本时出现了这个错误:
Set-MsolUserLicense : Unable to assign this license because it is invalid. Use the Get-MsolAccountSku cmdlet to retrieve a list of valid licenses.
Au caractère Ligne:1 : 1
+ Set-MsolUserLicense -UserPrincipalName toto@mycompany.com -AddLicense ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [Set-MsolUserLicense], MicrosoftOnlineException
+ FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.InvalidUserLicenseException,Microsoft.Online.Administration.Automation.SetUserLicense
看起来许可证不存在,但如果我手动执行命令,它会起作用。
此外,如果我像在脚本中那样放置变量 $toto,它会起作用:
$toto = "MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEWORD"
我不明白为什么当我手动执行时它会起作用,如果我从 CSV 文件中提取它就不起作用。
希望你能帮助我,
谢谢
假设以下代码按要求执行:
$toto = "MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEWORD"
Set-MsolUserLicense -UserPrincipalName toto@mycompany.com -AddLicenses $toto
$toto
是两个字符串的数组。每个字符串都是一个许可证名称。请参阅下面的输出:
$toto
输出:
MYCOMPANY:LICENCEXXX
MYCOMPANY:LICENCEWORD
为了 -AddLicenses
向每个 CSV 行传递两个许可证名称的数组,必须调整您的 CSV 示例。这是因为您的 header 行有两个 comma-separated 值。每个后续数据行都有三个 comma-separated 值。因此,您需要添加第三个 header 或将第二个和第三个数据字段(两个许可证名称)合并到一个字段中。 Import-Csv
期望 header 计数与每一行的数据字段计数完美对齐。
我们将尝试将许可证合并到一个字段中,并注意报价中的细微差别,因为我们引用的是整个字段而不是每个单独的许可证。此过程称为限定文本。
$csv = @'
Users,Licence
toto@mycompany.com,"MYCOMPANY:LICENCEXXX,MYCOMPANY:LICENCEVISIO"
titi@mycompany.com,"MYCOMPANY:LICENCEXXX,MYCOMPANY:LICENCEWORD"
tata@mycompany.com,"MYCOMPANY:LICENCEXXX,MYCOMPANY:LICENCEEXCEL"
'@
$csv | ConvertFrom-Csv | Foreach-Object {
Set-MsolUserLicense -UserPrincipalName $_.Users -AddLicenses $_.Licence.Split(',')
}
$_
是由 Foreach-Object
处理的当前 object(本例中的行)。 $_.Licence.Split(',')
通过在 ,
字符处拆分许可证数据来创建两个许可证字符串的数组。请注意,这里使用 ConvertFrom-Csv
只是因为我将 CSV 数据作为字符串而不是来自文件来处理。如果从文件中读取,您只需使用 Import-Csv file.csv | Foreach-Object {
.
我正在尝试使用 powershell 在 Office365 用户上设置许可证以供将来迁移。
为此,我首先将现有 users/licences 的列表(带有 powershell 脚本)放入 CSV 文件中。它看起来像这样:
Users,Licence
toto@mycompany.com,"MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEVISIO"
titi@mycompany.com,"MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEWORD"
tata@mycompany.com,"MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEEXCEL"
....
(有关信息,我确定许可证名称,因为我使用命令 Get-MsolAccountSku
获得了它们)
为了迁移的未来,我目前正在执行另一个脚本,通过获取有关 Licence 的信息,自动为现有用户设置许可证 CSV 文件的列
我是这样做的:
$csv = Import-Csv C:\output.csv
$toto = $csv[1].Licence
Set-MsolUserLicense -UserPrincipalName toto@mycompany.com -AddLicenses $toto
这是我的问题,当我启动这个脚本时出现了这个错误:
Set-MsolUserLicense : Unable to assign this license because it is invalid. Use the Get-MsolAccountSku cmdlet to retrieve a list of valid licenses.
Au caractère Ligne:1 : 1
+ Set-MsolUserLicense -UserPrincipalName toto@mycompany.com -AddLicense ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [Set-MsolUserLicense], MicrosoftOnlineException
+ FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.InvalidUserLicenseException,Microsoft.Online.Administration.Automation.SetUserLicense
看起来许可证不存在,但如果我手动执行命令,它会起作用。
此外,如果我像在脚本中那样放置变量 $toto,它会起作用:
$toto = "MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEWORD"
我不明白为什么当我手动执行时它会起作用,如果我从 CSV 文件中提取它就不起作用。
希望你能帮助我, 谢谢
假设以下代码按要求执行:
$toto = "MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEWORD"
Set-MsolUserLicense -UserPrincipalName toto@mycompany.com -AddLicenses $toto
$toto
是两个字符串的数组。每个字符串都是一个许可证名称。请参阅下面的输出:
$toto
输出:
MYCOMPANY:LICENCEXXX
MYCOMPANY:LICENCEWORD
为了 -AddLicenses
向每个 CSV 行传递两个许可证名称的数组,必须调整您的 CSV 示例。这是因为您的 header 行有两个 comma-separated 值。每个后续数据行都有三个 comma-separated 值。因此,您需要添加第三个 header 或将第二个和第三个数据字段(两个许可证名称)合并到一个字段中。 Import-Csv
期望 header 计数与每一行的数据字段计数完美对齐。
我们将尝试将许可证合并到一个字段中,并注意报价中的细微差别,因为我们引用的是整个字段而不是每个单独的许可证。此过程称为限定文本。
$csv = @'
Users,Licence
toto@mycompany.com,"MYCOMPANY:LICENCEXXX,MYCOMPANY:LICENCEVISIO"
titi@mycompany.com,"MYCOMPANY:LICENCEXXX,MYCOMPANY:LICENCEWORD"
tata@mycompany.com,"MYCOMPANY:LICENCEXXX,MYCOMPANY:LICENCEEXCEL"
'@
$csv | ConvertFrom-Csv | Foreach-Object {
Set-MsolUserLicense -UserPrincipalName $_.Users -AddLicenses $_.Licence.Split(',')
}
$_
是由 Foreach-Object
处理的当前 object(本例中的行)。 $_.Licence.Split(',')
通过在 ,
字符处拆分许可证数据来创建两个许可证字符串的数组。请注意,这里使用 ConvertFrom-Csv
只是因为我将 CSV 数据作为字符串而不是来自文件来处理。如果从文件中读取,您只需使用 Import-Csv file.csv | Foreach-Object {
.