我使用New-Object定义了一个定制的PowerShell类型。我想要一个参数为我定义的类型,是否可以用声明方式指定此类型?下面的代码给我错误:“无法找到类型[BuildActionContext]:确保包含此类型的程序集已加载。”使用定制的PowerShell定义的类型来定义参数类型
我们可以指定声明的类型,还是应该测试指定对象的类型?
不工作代码:
$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
工作的代码,但它可以被不同的做法:
$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"
注:第二个电话给异常消息。
右键,新对象不创建类型,它创建的类型的实例。您可以使用Add-Type使用C#或VB.NET创建一个类型。 – JasonMArcher 2010-09-07 17:34:20
句子“如果你手动检查类型名称,你可以使用属性:”真是令人困惑。我不确定作者想传达什么,而且在代码中对我来说并不明显。 – 2016-07-08 14:57:23
Omg,这已经是6年了。我会尝试编辑这个句子。 – stej 2016-07-15 06:11:42