我尝试验证特定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函数,则命令将无法使用。