La spécification d'un type de mot de passe correct devrait suffire, essayez:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
PowerShell "masquera" le mot de passe (comme pour read-host -asSecureString) et le type de résultat sera celui dont les autres applets de commande peuvent avoir besoin.
EDIT: Après les commentaires récents: solution, qui donne aux deux options pour fournir un mot de passe en texte brut, ou forcer l' utilisateur à taper le mot de passe (mais le masquer de la même manière que Read-Host -AsSecureString le ferait) et dans les deux cas obtenir [Security.SecureString] à la fin . Et, en prime, vous obtenez une invite de fantaisie pour votre mot de passe secret. ;)
[CmdletBinding(
DefaultParameterSetName = 'Secret'
)]
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(
Mandatory = $True,
ParameterSetName = 'Secret'
)]
[Security.SecureString]${Type your secret password},
[Parameter(
Mandatory = $True,
ParameterSetName = 'Plain'
)]
[string]$Password
)
if ($Password) {
$SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
$SecretPassword = ${Type your secret password}
}
Do-Stuff -With $SecretPassword
J'ai utilisé l'astuce de Jaykul ici pour tricher en demandant un mot de passe sécurisé. ;) Cela rendra ce paramètre très difficile à utiliser en mode CLI (-Tapez votre mot de passe secret ne fonctionnera pas comme prévu), donc il devrait forcer les utilisateurs du script à omettre le mot de passe (et à obtenir une invite masquée) ou à le spécifier avec -password paramètre qui accepte une chaîne régulière et la convertit en chaîne sécurisée dans la logique de script.
C'est un peu difficile de déchiffrer ce que vous essayez de faire ...
Éditer; comme mentionné par Ryan, vous le spécifiez déjà en tant que chaîne ...
Mais dans certains codes, j'ai utilisé la fonction suivante lors de l'utilisation de Read-Host et SecureStrings
Dans votre cas, vous l'appelleriez en procédant comme suit;
EDIT: Compte tenu des commentaires, et juste pour l'enfer ... voici une méthode alternative utilisée pour convertir la chaîne sécurisée ci-dessus en texte brut dans Powershell;
Vous l'utiliseriez comme ceci;
Pour résumer, vous prenez le mot de passe masqué, c'est une chaîne sécurisée, vous pouvez ensuite le décomposer en texte brut pour une utilisation ailleurs, un vrai exemple de mot serait si certains programmes CLI n'acceptent que les mots de passe qui leur sont passés en texte brut, ce aide à l'automatisation lorsque vous ne voulez pas coder en dur un mot de passe dans votre script.
la source
Je ne suis pas sûr que je comprends ... il semble que vous avez déjà faites faire. En définissant le paramètre sur obligatoire, Powershell vous le demandera si vous ne le fournissez pas sur la ligne de commande, et avec [chaîne] vous vous assurez que le seul type de données pouvant entrer dans cette variable est System.string.
EDIT: En s'appuyant sur la réponse de Bartek, faites-le dans votre script:
Ensuite, vous devez passer à votre script un objet SecureString comme ceci:
la source