Comment passer d'une table de hachage à une fonction dans PowerShell?
Lors du passage d'une table de hachage pour mon PowerShell fonction, il se plaint qu'il reçoit d'un objet.
Function ExtendHash(){
param(
[hashtable] $source,
[hashtable] $extender
)
...
}
Et l'appelant:
$hash1 = @{One = 1; Two = 2}
$hash2 = @{Two = 22; three = 3}
ExtendHash($hash1, $hash2)
Ne peut pas convertir le Système.Object[] la valeur de type de Système.Object[] pour le type de Système.Collection.Hashtable
Alors, comment dois-je faire ce travail? Des Suggestions?
Aussi, suis-je raté quelque chose d'intégré? Je veux le même patron que le JavaScript utilise pour étendre les options par défaut (fusion et remplacer les valeurs par défaut).
- Pour vos tables de hachage, ne devriez-vous pas utiliser un point-virgule au lieu d'une virgule - ie. @{Un = 1, Deux = 2} devrait être @{Un = 1; Deux = 2}
Vous devez vous connecter pour publier un commentaire.
Ne pas utiliser les parenthèses et les virgules. C'est PowerShell (dire, les arguments sont similaires à des arguments de commandes CMD). C'est, appelez votre fonction comme ceci:
Dans votre cas, l'expression
($hash1,$hash2)
est un tableau de deux éléments et que vous passez de ce tableau, un argument à la fonction. Exemple d'échec de l'appel correctement.Si vous utilisez
Set-StrictMode -Version 2
puis ce "commun" erreur est capturé par PowerShell:foo.SomeThing(a, b)
etSome-Thing a b
(à côté de Romain réponse🙂
L'appelant n'a pas besoin de stocker les tables de hachage dans des variables et l'on peut alors également utiliser cette:
(
-source
et-extender
sont nécessaires pour les tables de hachage ne sont pas interprété comme arg-la valeur de paires par lui-même pourExtendHash
)