我使用New-Object定义自定义PowerShell类型.我希望参数是我定义的类型,是否可以以声明方式指定此类型?下面的代码给出了错误:"无法找到类型[BuildActionContext]:确保加载包含此类型的程序集."
我们可以指定声明类型,还是应该只测试指定对象的类型?
不工作的代码:
$buildActionContext = New-Object -TypeName PSObject -Property @{
# Given properties
BuildAction = "Build";
}
$buildActionContext.PSObject.TypeNames.Insert(0, 'BuildActionContext')
function DoSomethingWithBuildActionContext
{
[CmdletBinding()]
param
(
[Parameter(Mandatory=$true)][BuildActionContext]$Context
)
Write-Host "Build action: $($Context.BuildAction)"
}
DoSomethingWithBuildActionContext -Context $buildActionContext
Run Code Online (Sandbox Code Playgroud)
工作代码,但可以不同的方式完成:
$buildActionContext = New-Object -TypeName PSObject -Property @{
# Given properties
BuildAction = "Build";
}
$buildActionContext.PSObject.TypeNames.Insert(0, 'BuildActionContext')
function DoSomethingWithBuildActionContext
{
[CmdletBinding()]
param
(
[Parameter(Mandatory=$true)]$Context
)
if ($Context.PSObject.TypeNames[0] -ne 'BuildActionContext')
{
throw "Context parameter not of type 'BuildActionContext'"
}
Write-Host "Build action: $($Context.BuildAction)"
}
DoSomethingWithBuildActionContext -Context $buildActionContext
DoSomethingWithBuildActionContext -Context "Hello world"
Run Code Online (Sandbox Code Playgroud)
注意:第二次调用会给出异常消息.
我希望只有真正的.NET类型可用于指定参数类型.根据Essential PowerShell:命名自定义对象类型,自定义类型名称主要用于格式化.
您可以通过ValidateScript属性手动检查类型名称:
function DoSomethingWithBuildActionContext {
param(
[Parameter()]
[ValidateScript({ $_.PSObject.TypeNames[0] -eq 'BuildActionContext' })]
$context
)
Write-Host "Build action: $($Context.BuildAction)"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5056 次 |
| 最近记录: |