New-Object: Impossible de trouver une surcharge pour "PSCredential" et le nombre d'arguments: "2"
Je suis en train d'écrire un script PowerShell sur un Windows 8.1 machine. Lorsque vous essayez de créer un PSCredential objet en utilisant la cmdlet New-Objet, j'ai été présenté avec cette erreur:
Nouvelle-Objet : Impossible de trouver une surcharge pour "PSCredential" et l'argument nombre: "2".
De l'exécution de l'exacte même script sur un autre Windows 8.1 machine fonctionne très bien pour moi. J'ai également vérifié que les deux machines exécutent la même version de PowerShell 4.0
Les deux machines ont la même .NET Framework 4.0.
Une idée de pourquoi cela se passe et comment je pourrais résoudre ce problème?
$userPassword = ConvertTo-SecureString -String "MyPassword" -AsPlainText -Force
$userCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "myUserName", $userPassword
Après quelques essais, j'ai trouvé le problème. Pour ma fonction, j'ai l'intention de prendre le nom d'utilisateur et le mot de passe de l'utilisateur, mais aussi de fournir des valeurs par défaut si l'utilisateur décide d'ignorer ces paramètres d'entrée.
Pour que je l'ai réalisé en ajoutant la ligne suivante dans la section paramètres de
[string][ValidateNotNullOrEmpty()] $userPassword = "myPassword",
Il semble que le problème est que j'ai défini pour être un [String] dans le paramètre, mais plus tard, en essayant d'être un SecureString, ce qui a entraîné le problème.
Retrait de la [Chaîne] attribut dans mes paramètre résolu le problème.
source d'informationauteur xenoverse
Vous devez vous connecter pour publier un commentaire.
Dans ce genre de situation, vous voudrez peut-être vérifier votre type de paramètre. Dans cet exemple particulier, le paramètre d'entrée a été déclaré à une Chaîne de caractères. Toutefois, le résultat ConvertTo-SecureString renvoie une SecureString.
Le message d'erreur est un peu trompeur dans cette situation. Le problème n'est pas parce qu'il n'y a pas de constructeur avec 2 arguments, mais parce que $motdepasse a été déclaré à une Chaîne de caractères, mais plus tard a été changé à SecureString.
Rappelez-vous aussi que si vous n'avez pas besoin d'un justificatif d'identité autres que le justificatif d'identité de la personne qui exécute la commande (ou le script), vous pouvez ignorer tout cela avec un one-liner:
Une fenêtre vous demandera alors d'entrer votre nom d'utilisateur et mot de passe. Juste comme ça, vous avez capturé vos informations d'identification dans une variable que vous pouvez utiliser à la ligne de commande ou vous pouvez l'utiliser dans un script pour inviter l'utilisateur à entrer leurs informations d'identification.