首页 > 解决方案 > Powershell 函数参数

问题描述

所以我创建了一个为用户分配许可证的功能。当我执行该函数时,它会显示一个错误。

Function Create_resource_account {
[CmdletBinding()]
param (
    [Parameter(Mandatory = $true, Position = 0)]
    [string] $UserPrincipalName,
    [Parameter(Mandatory = $true, Position = 1)]
    [string] $ApplicationId,
    [Parameter(Mandatory = $true, Position = 2)]
    [string] $DisplayName
)
process {
    try {
        New-CsOnlineApplicationInstance -UserPrincipalName $UserPrincipalName -ApplicationId $ApplicationId -DisplayName $DisplayName
    }    
    catch {
        write-Log(“Error while creating a new application instance for a Call queue with $UserPrincipalName”)
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        Write-Log($ErrorMessage)
        Write-Log($FailedItem)
        exit(0)
    }
}
}

Function AddLicense {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true, Position = 0)]
[string] $UserPrincipalName,
[Parameter(Mandatory = $true, Position = 1)]
[string] $License,
[Parameter(Mandatory = $true, Position = 2)]
[string] $UsageLocation
)
process {
$SkuIds = (Get-MsolUser -UserPrincipalName $UserPrincipalName).licenses | ForEach-Object { $_.AccountSkuId }
if ( $SkuIds -contains $License) {
    Write-Output ("No licence to assign for $UserPrincipalName")
}
else {
    try {
        Get-MsolUser -UserPrincipalName $UserPrincipalName -UsageLocation $UsageLocation 
        Set-MsolUserLicense -UserPrincipalName $UserPrincipalName -AddLicenses $License
    }
    catch {
        write-Log(“Error while assigning PhoneSystem Virtual Licence to $UserPrincipalName”)
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        Write-Log($ErrorMessage)
        Write-Log($FailedItem)
        exit(0)
    }
}
}
}
$Util2 = Get-PnPListItem -List "2"
foreach ($temp2 in $Util2) {

    $CQNom = $temp2['CQ_nom']
    $CQMail = $temp2['CQ_Compte_de_ressource']
    $CQNum = $temp2['Tel_sda']    


#Création des ressources
$newCqRa = Create_resource_account $CQMail 11cd3e2e-fccb-42ad-ad00-878b93575e07 "RA_$CQNom"   #Call queue


#Assign licence
$User = Get-AzureADUser -objectid $newCqRa.ObjectId | select -ExpandProperty UserPrincipalName
AddLicense $User "domain:PHONESYSTEM_VIRTUALUSER" "US"}

错误

Get-MsolUser : User Not Found.  User: CQ-JeanPierreViseur@domain.onmicrosoft.com.
Au caractère Ligne:51 : 26
+ ... nsedUser = (Get-MsolUser -UserPrincipalName $UserPrincipalName).licen ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [Get-MsolUser], MicrosoftOnlineException
+ FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.UserNotFoundException,Microsoft.Online.Administration.Automation.GetUser

它向所有用户显示了相同的错误。我告诉自己,我的 Addlicense 函数有问题。有人可以帮助我。

我还将程序的功能存储在日志文件中,这就是它写给我的内容

"Error while assigning PhoneSystem Virtual Licence to CQ-EricDesbordes@domain.onmicrosoft.com 
The parameter set cannot be resolved using the specified named parameters.

Error while assigning PhoneSystem Virtual Licence to CQ-JeanPierreViseur@domain.onmicrosoft.com The parameter set cannot be resolved using the specified named parameters."

感谢同志们的建议,我能够在 addlicense 功能上解决我的问题

Function AddLicense {
[CmdletBinding()]
param (
    [Parameter(Mandatory = $true, Position = 0)]
    [Guid] $objectid,
    [Parameter(Mandatory = $true, Position = 1)]
    [String[]] $SkuidLicense,
    [Parameter(Mandatory = $true, Position = 2)]
    [string] $UsageLocation
)
process {
    $SkuID = Get-AzureADUser -ObjectID $objectid | Select -ExpandProperty AssignedLicenses | Select SkuID
    if ( $SkuID -contains $SkuidLicense) {
        Write-Log ("No licence to assign for $newCqRa")
    }
    else {
        try {
            Set-AzureADUser -ObjectId $objectid -UsageLocation $UsageLocation
            $License = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
            $License.SkuId = $SkuidLicense
            $LicensesToAssign = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
            $LicensesToAssign.AddLicenses = $License
            Set-AzureADUserLicense -ObjectId $objectid -AssignedLicenses $LicensesToAssign
        }
        catch {
            write-Log(“Error while assigning PhoneSystem Virtual Licence to $newCqRa”)
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            Write-Log($ErrorMessage)
            Write-Log($FailedItem)
            
        }
    }
}
#Attribution de la licence
AddLicense $newCqRa.ObjectId "440eaaa8-b3e0-484b-a8be-62870b9ba70a" "US"

标签: functionpowershellparametersmicrosoft-teamscmdlet

解决方案


推荐阅读