2010-07-23 3 views
11

Je voudrais utiliser un HashSet dans un script PowerShell. Je pense avoir compris comment instancier objets de collection génériques en faisant:Puis-je utiliser System.Core.dll/System.Collections.Generic.HashSet dans powershell?

[type] $strType = "string" 
$listClass = [System.Collections.Generic.List``1] 
$listObject = $base.MakeGenericType(@($t)) 
$myList = New-Object $setObject 

Cela fonctionne bien pour les listes et les dictionnaires, mais lorsque je tente de créer un HashSet je reçois:

Unable to find type [System.Collections.Generic.HashSet`1]: make sure that the assembly containing this type is loaded. 

Alors il semble maintenant que j'ai besoin de charger System.Core.dll mais je ne peux pas sembler obtenir powershell pour charger cet assembly. Par exemple appeler [System.Reflection.Assembly] :: LoadWithPartialName ("System.Core") fait cette exception:

"LoadWithPartialName" with "1" argument(s): "Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified." 

Tous les pointeurs?

+0

êtes-vous dans powershell v1 ou v2? – x0n

+0

Je suis sur Win2k8 R2 et get-host dit version 2.0 – nick

+2

Copie possible: Voir la réponse à http://stackoverflow.com/questions/184476/powershell-generic-collections – zdan

Répondre

21

PowerShell 2.0 rend cela plus facile en 1) ajouter l'applet de commande Add-type pour le chargement d'un ensemble et 2) mises à jour de la syntaxe pour faire en spécifiant un nom de type générique fermé plus simple, par exemple:

PS> Add-Type -AssemblyName System.Core 
PS> $h = new-object 'System.Collections.Generic.HashSet[string]' 
PS> $h.Add('f') 
True 
+0

Fonctionne bien - merci. – nick

+0

Puis-je spécifier le type de paramètre dans les fonctions en faisant '[Paramètre (Mandatory = $ true)] [hashset]'? –

+2

Oui, mais vous devez spécifier le type de paramètre comme suit: [Collections.Generic.HashSet [chaîne]] 'remplace la chaîne que vous devez stocker dans le hashset. –

Questions connexes