我使用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