À l'aide de Powershell -encodedcommand pour passer des paramètres

J'essaie de trouver un moyen élégant de passer des paramètres à un script powershell où la chaîne de caractères peut contenir un nombre quelconque de caractères spéciaux qui auraient besoin d'être échappés. Par exemple, un mot de passe complexe avec des caractères spéciaux.

Je regardais au -encodedcommand option, mais il semble que c'est uniquement destinée à passer un script codé bloc, pas une version codée de paramètres.

Par exemple, considérons le script suivant:

param(
[Parameter()][Alias("un")][string]$Username,
[Parameter()][Alias("pw")][string]$Password
)

Write-Host "Username: $Username"
Write-Host "Password: $Password"

La chaîne "de l'onu testuser -pw testpw' est encodé en base64 comme suit:
LQB1AG4AIAB0AGUAcwB0AHUAcwBlAHIAiaatahaadwagahqazqbzahqacab3aa==

J'ai essayé d'appeler le script comme un .ps1 fichier et en passant -encodedcommand avec la chaîne mais j'ai reçu l'erreur " paramètre ne peut pas être trouvée, qui correspond à nom du paramètre 'encodedcommand'

Donc, fine, ce doit être un appel à powershell.exe directement à.

Aussi essayé le suivant:
powershell.exe -encodedcommand LQB1AG4AIAB0AGUAcwB0AHUAcwBlAHIAiaatahaadwagahqazqbzahqacab3aa== -fichier Base64ParamTest.ps1

Ce exécuté le script, mais les paramètres n'avaient aucune valeur.

C'est se comporter comme je l'espère, mais pas comme je l'espère. Est-il un moyen de passer mes paramètres eux-mêmes comme des chaînes codées en toute sécurité?

Mon Plan B est de Base64 encode la valeur du mot de passe lui-même par opposition à l'ensemble de la chaîne de paramètre puis décoder que dans le script. Assez Simple, mais je me demandais si j'ai été absent un moyen plus facile de le faire automatiquement

OriginalL'auteur Eric | 2011-06-09