我正在尝试从Office365 E1许可证禁用子许可证

时间:2019-03-23 22:38:41

标签: powershell office365

我有一个项目,需要在office365 E1许可证下禁用“ EXCHANGE_S_STANDARD”。必须为300多个用户完成此操作。我一直在尝试使用PowerShell。

我在跑步 (Get-MsolUser -UserPrincipalName testuser@domain.com).Licenses[0].ServiceStatus[16],所以我知道这是正确的服务计划,但仍然无法正常工作,而且我不确定自己做错了什么。

$License = "Domain:STANDARDPACK"
$LicenseOption = New-MsolLicenseOptions -AccountSkuId $License -DisabledPlans "EXCHANGE_S_STANDARD"
Get-MsolUser -UserPrincipalName testuser@Domain.com | Set-MsolUserLicense $LicenseOption

这是我遇到的错误。

Set-MsolUserLicense : A positional parameter cannot be found that accepts argument 'Microsoft.Online.Administration.LicenseOption'.
At line:3 char:58
+ ... cipalName testuser@domain.com | Set-MsolUserLicense $LicenseOption
+                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-MsolUserLicense], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.Online.Administration.Automation.SetUserLicense

谢谢您的时间。

1 个答案:

答案 0 :(得分:1)

运行-LicenseOptions时需要使用Set-MsolUserLicense参数:

Get-MsolUser -UserPrincipalName testuser@Domain.com | Set-MsolUserLicense -LicenseOptions $LicenseOption

位置参数错误表示尚未为参数分配位置编号。如果分配了位置编号,则可以在不使用参数名称的情况下将传递给该参数的值附加到命令中。位置编号以0开头。

Function Example {
Param(
   [Parameter(Position=0)]
   [string]$Par1,
   [Parameter(Position=1)]
   [string]$Par2,
   [Parameter(Position=2)]
   [string]$Par3
)
$PSBoundParameters
}

Example "Value1" "Value2" "Value3" # Using Positions

Key  Value
---  -----
Par1 Value1
Par2 Value2
Par3 Value3

Example -Par1 "Value1" -Par2 "Value2" -Par3 "Value3" # Using Parameter Names

Key  Value
---  -----
Par1 Value1
Par2 Value2
Par3 Value3

但是,请注意,如果将使用和不使用参数名称与位置参数混合使用,PowerShell将按照没有赋值的位置参数的顺序分配未命名的值:

Example "Value3" "Value2" -Par1 "Value1"

Key  Value
---  -----
Par1 Value1
Par2 Value3
Par3 Value2

请注意-Par1是如何使用命名参数获得Value1的。但是$Par2得到了Value3,而$Par3得到了Value2。这是因为位置0处的参数已分配。位置1和2没有命名分配。因此,第一个未命名的参数值将转到具有最低可用位置编号的参数。