2009-10-26 4 views

Répondre

1

écrivez-vous une PSHost personnalisée? Si c'est le cas, votre hôte personnalisé devra alors fournir votre propre implémentation de PSHostUserInterface, puis implémenter PromptForCredential().

Si vous devez l'implémenter vous-même et que vous souhaitez utiliser la boîte de dialogue d'informations d'identification Windows standard que PowerShell utilise par défaut, vous pouvez utiliser l'API CredUIPromptForCredentials(). Il y a du code sur comment l'appeler .NET here et here.

+0

Merci pour la réponse! J'espère ne pas avoir à écrire un hôte personnalisé. J'ai seulement besoin de demander des informations d'identification et de récupérer un objet PSCredential. Les informations d'identification ne doivent pas être vérifiées car je dois transmettre le mot de passe du nom d'utilisateur pour un ordinateur distant dans un groupe de travail. Existe-t-il un moyen d'obtenir l'objet PShost par défaut d'un Runspace? puis appelez le PromtForCredential comme décrit ici http://msdn.microsoft.com/en-us/library/system.management.automation.pscredential%28VS.85%29.aspx –

+0

Je ne suis pas sûr de comprendre ce que vous ' re faire, alors. Dans quel contexte essayez-vous d'obtenir ces informations d'identification? Dans un script PowerShell? Si c'est le cas, alors appeler Get-Credential est vraiment le chemin à parcourir, et comme c'est un wrapper très fin sur PSHostUserInterface.PromptForCredential(), si Get-Credential ne fonctionne pas, l'autre ne le sera pas non plus. Où votre script est-il exécuté? – tomasr

+0

Si vous écrivez une application C# qui utilise des cmdlets powershell, vous écrivez essentiellement un hôte et vous devrez l'implémenter vous-même. Si vous écrivez une cmdlet ... vous devez simplement ajouter un paramètre qui accepte les informations d'identification de l'utilisateur, et ne pas essayer de les obtenir vous-même. – Jaykul

4

Passez par l'objet de l'interface utilisateur de l'hôte actuel pour inviter l'utilisateur à un titre comme ceci:

PSCredential cred = this.Host.UI.PromptForCredential("Enter username/password", 
                "", "", ""); 

Cependant, si vous créez une applet de commande et aller dans cette voie plutôt que de créer un paramètre Credential alors l'utilisateur ne pas être en mesure de fournir des informations d'identification de manière automatisée (c'est-à-dire par le biais d'un argument du paramètre Credential).

BTW si votre programme connaît les pouvoirs et vous ne voulez pas demander à l'utilisateur final, vous pouvez alors créer un nouveau PSCredential directement par exemple:

var password = new SecureString(); 
Array.ForEach("opensesame".ToCharArray(), password.AppendChar); 
var cred = new PSCredential("john", password); 

Cependant je ne voudrais pas coder en dur le mot de passe dans le fichier EXE . J'utiliserais DPAPI ou quelque chose comme ça.

+0

N'oubliez pas que vous devez hériter de PSCmdlet au lieu de Cmdlet pour que cela fonctionne. – Skrymsli

Questions connexes