PowerShell Adaptatif de Type de Système ne vous permet pas de créer des types de béton, vous pouvez tester à l'encontre de la façon dont vous l'avez fait dans votre paramètre. Si vous n'avez pas besoin de ce test, vous êtes bien avec l'une des méthodes mentionnées ci-dessus.
Si vous voulez un type réel que vous pouvez exprimés pour ou type-vérifier avec, comme dans votre exemple de script ... il ne peut pas être fait sans compilation. Dans PowerShell 2, vous pouvez utiliser le bouton "Ajouter" Type de commande pour ce faire, il suffit de:
add-type @"
public struct contact {
public string First;
public string Last;
public string Phone;
}
"@
Dans PowerShell 1, vous pouvez utiliser CodeDom, il y a un nouveau-struct script sur PoshCode.org qui va nous aider. Votre exemple devient:
New-Struct Contact @{
First=[string];
Last=[string];
Phone=[string];
}
À l'aide de la Nouvelle-Struct script vous permettra de tester la classe dans votre param([Contact]$contact)
et de faire de nouveaux à l'aide de $contact = new-object Contact
et ainsi de suite...
D'ailleurs, si vous décidez que vous n'avez pas besoin d'une "vraie" classe que vous pouvez lancer et de tester contre, dans PowerShell 2.0, vous pouvez utiliser le paramètre de Propriété pour les Nouveau-Objet:
$Contact = New-Object PSObject -Property @{ First=""; Last=""; Phone="" }
De cette façon, vous obtenez l'objet de base que vous voulez avec moins de code qu'avant. Mais vous êtes seulement un objet unique, de sorte que vous avez à exécuter du code comme ça pour chaque Contact, et vous ne pouvez pas facilement test pour voir si un objet "est" un de ces type.