PowerShell函数 - 验证必需的PSSession

时间:2016-05-12 15:15:45

标签: function validation powershell parameters

我尝试验证特定PSSession已经建立并且在允许运行PS功能之前处于活动状态。不幸的是,除非你提供输入,否则看起来ValidateScript不会触发,设置默认值也不会触发ValidateScript。

有没有办法在Begin / Process / End触发之前验证特定的PSSession是否存在?如果不是,我假设我需要将这个逻辑放入函数本身。

我不希望用户必须提供预期的PSSession作为参数,我更喜欢该功能在运行之前自动验证它。下面是我想要完成的一个例子。

function Get-O365License
{
    <#
    .Synopsis
       Short description
    .DESCRIPTION
       Long description
    .EXAMPLE
       Example of how to use this cmdlet
    .EXAMPLE
       Another example of how to use this cmdlet
    #>
    [CmdletBinding()]
    [Alias()]
    [OutputType([int])]
    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)]
        $Identity,

        # Param2 help description
        #[Parameter(DontShow)]
        [ValidateScript({Get-PSSession})]
        $MsolSession,

        # Param2 help description
        #[Parameter(DontShow)]
        [ValidateScript({Get-PSSession})]
        $EXOSession
    )

    Begin
    {
    }
    Process
    {
    }
    End
    {
    }
}

我想验证特定会话的原因是在此函数运行之前运行的,所以我知道函数的所有要求都已到位。

例如,如果我在运行Get-MsolService之前尝试在函数中运行Get-MsolUser,那么该函数将失败并出现以下错误:

Get-MsolCompanyInformation : You must call the Connect-MsolService cmdlet before calling any other cmdlets.
At line:1 char:1
+ Get-MsolCompanyInformation
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [Get-MsolCompanyInformation], MicrosoftOnlineException
    + FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.MicrosoftOnlineException,Microsoft.Online.Adm
   inistration.Automation.GetCompanyInformation

同样,如果我尝试在不连接到Exchange的情况下调用Exchange远程PowerShell函数,则命令将无法使用。

0 个答案:

没有答案