Je définis un type PowerShell personnalisé avec New-Object. Je voudrais qu'un paramètre soit de mon type défini, est-il possible de spécifier ce type de façon déclarative? Le code suivant me donne l'erreur: "Impossible de trouver le type [BuildActionContext]: assurez-vous que l'assembly contenant ce type est chargé."Utiliser un type défini PowerShell personnalisé pour la spécification du type de paramètre
Pouvons-nous spécifier le type déclaratif, ou devrais-je simplement tester le type de l'objet spécifié?
Non Code de travail:
$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
Code de travail, mais peut-il être fait différemment:
$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"
Note: deuxième appel donne le message d'exception.
droit, Nouveau-objet ne crée pas les types, il crée des instances de types. Vous pouvez utiliser Add-Type pour créer un type avec C# ou VB.NET. – JasonMArcher
La phrase "Si vous vérifiez les noms de types manuellement, vous pouvez utiliser des attributs pour cela:" est vraiment déroutant. Je ne suis pas sûr de ce que l'auteur essaie de transmettre, et ce n'est pas évident pour moi dans le code. –
Omg, ça fait déjà 6 ans .. Je vais essayer d'éditer la phrase. – stej