Я определяю пользовательский тип PowerShell с помощью New-Object. Я хотел бы, чтобы параметр был моего определенного типа, возможно ли указать этот тип декларативным способом? Следующий код дает мне сообщение об ошибке: «Невозможно найти тип [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
Рабочий код, но можно ли это сделать по-другому:
$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"
Примечание: второй вызов выдает сообщение об исключении.