Especificar el tipo correcto de contraseña debería ser suficiente, intente:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
PowerShell "enmascarará" la contraseña (igual que para read-host -asSecureString) y el tipo de resultado será el que otros cmdlets puedan requerir.
EDITAR: después de los comentarios recientes: solución, que ofrece ambas opciones para proporcionar una contraseña de texto sin formato, o forzar al usuario a escribir la contraseña (pero enmascararla de la misma manera que lo haría Read-Host -AsSecureString) y en ambos casos obtener [Security.SecureString] al final . Y, como beneficio adicional, obtienes un aviso rápido para tu contraseña secreta. ;)
[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
He usado el truco de Jaykul aquí para hacer trampa al solicitar una contraseña segura. ;) Hará que este parámetro sea muy difícil de usar en el modo CLI (-Escriba su contraseña secreta no funcionará como se esperaba), por lo que debería obligar a los usuarios de la secuencia de comandos a omitir la contraseña (y obtener una solicitud enmascarada) o especificarla con -parámetro de contraseña que acepta una cadena normal y la convierte en una cadena segura dentro de la lógica del script.
Es un poco difícil descifrar lo que estás tratando de hacer ...
Editar; como mencionó Ryan, actualmente ya lo estás especificando como una cadena ...
Pero en algunos códigos, he usado la siguiente función cuando uso Read-Host y SecureStrings
En su caso, lo llamaría haciendo lo siguiente;
EDITAR: Comentarios dados, y solo por el placer de hacerlo ... aquí hay un método alternativo utilizado para convertir la cadena segura anterior en texto sin formato dentro de Powershell;
Lo usarías así;
Resumiendo, tomas la contraseña enmascarada, es una cadena segura, luego puedes dividirla en texto sin formato para usarla en otra parte, un ejemplo de una palabra real sería si ciertos programas de CLI solo aceptan que se pasen contraseñas como texto sin formato, esto ayuda con la automatización donde no desea codificar una contraseña en su script.
fuente
No estoy seguro de entender ... parece que ya lo estás haciendo. Al establecer el parámetro como obligatorio, Powershell lo solicitará si no lo proporciona en la línea de comando, y con [cadena] se asegurará de que el único tipo de datos que pueda entrar en esa variable sea System.string.
EDITAR: Basándose en la respuesta de Bartek, haga esto en su script:
Luego debe pasar su script a un objeto SecureString de esta manera:
fuente