Defino un tipo de PowerShell personalizado con New-Object. Me gustaría que un parámetro sea de mi tipo definido, ¿es posible especificar este tipo de manera declarativa? El siguiente código me da el error: "No se puede encontrar el tipo [BuildActionContext]: asegúrese de que el ensamblaje que contiene este tipo esté cargado".Use el tipo definido de PowerShell personalizado para la especificación de tipo de parámetro
¿Podemos especificar el tipo declarativo, o debería simplemente probar el tipo del objeto especificado?
No es el código de trabajo:
$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
código de trabajo, pero puede hacerse de otra manera:
$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"
Nota: Segunda convocatoria da el mensaje de excepción.
derecha, New-Object no crea tipos, que crea instancias de tipos. Puede usar Add-Type para crear un tipo con C# o VB.NET. – JasonMArcher
La frase "Si va a verificar los nombres de tipo manualmente, puede usar atributos para eso:" es realmente confuso. No estoy seguro de lo que el autor está tratando de transmitir, y no es evidente para mí en el código. –
Omg, eso ya son 6 años .. Trataré de editar la oración. – stej