usar tutorial script como commands comandos powershell

tutorial - Indicar la entrada del usuario en PowerShell



powershell tutorial (4)

Coloque esto en la parte superior de su secuencia de comandos. Hará que la secuencia de comandos solicite una contraseña al usuario. La contraseña resultante se puede usar en otro lugar de su script a través de $ pw .

Param( [Parameter(Mandatory=$true, Position=0, HelpMessage="Password?")] [SecureString]$password ) $pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))

Si quiere depurar y ver el valor de la contraseña que acaba de leer, use:

write-host $pw

Deseo solicitar al usuario una serie de entradas, incluida una contraseña y un nombre de archivo.

Tengo un ejemplo de usar host.ui.prompt , que parece sensato, pero no puedo entender el retorno.

¿Hay alguna forma mejor de obtener comentarios de los usuarios en PowerShell?


Como alternativa, puede agregarlo como un parámetro de script para la entrada como parte de la ejecución del script

param( [Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value1, [Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value2 )


Usar el enlace de parámetros definitivamente es el camino a seguir aquí. No solo es muy rápido de escribir (solo agrega [Parameter(Mandatory=$true)] sobre tus parámetros obligatorios), pero también es la única opción que no te odiarás más tarde.

Más abajo:

[Console]::ReadLine está explícitamente prohibido por las reglas de FxCop para PowerShell. ¿Por qué? Porque solo funciona en PowerShell.exe, no en PowerShell ISE , PowerGUI , etc.

Read-Host es, simplemente, mala forma. Read-Host detiene incontrolablemente el script para solicitarle al usuario, lo que significa que nunca podrá tener otro script que incluya el script que usa Read-Host.

Estás tratando de pedir parámetros.

Debe usar el atributo [Parameter(Mandatory=$true)] y corregir el tipeo para solicitar los parámetros.

Si usa esto en un [SecureString] , le pedirá un campo de contraseña. Si usa esto en un tipo de credencial, ( [Management.Automation.PSCredential] ), aparecerá el cuadro de diálogo de credenciales, si el parámetro no está allí. Una cadena se convertirá en un simple cuadro de texto antiguo. Si agrega un HelpMessage al atributo de parámetro (es decir, [Parameter(Mandatory = $true, HelpMessage = ''New User Credentials'')] ), se convertirá en texto de ayuda para el aviso.


Read-Host es una opción simple para obtener entrada de cadena de un usuario.

$name = Read-Host ''What is your username?''

Para ocultar contraseñas, puede usar:

$pass = Read-Host ''What is your password?'' -AsSecureString

Para convertir la contraseña en texto sin formato:

[Runtime.InteropServices.Marshal]::PtrToStringAuto( [Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))

En cuanto al tipo devuelto por $host.UI.Prompt() , si ejecuta el código en el enlace publicado en el comentario de @ Christian, puede averiguar el tipo de devolución canalizándolo a Get-Member (por ejemplo, $results | gm ). El resultado es un diccionario donde la clave es el nombre de un objeto FieldDescription utilizado en el aviso. Para acceder al resultado del primer aviso en el ejemplo vinculado, escriba: $results[''String Field''] .

Para acceder a la información sin invocar un método, deje los paréntesis desactivados:

PS> $Host.UI.Prompt MemberType : Method OverloadDefinitions : {System.Collections.Generic.Dictionary[string,psobject] Pr ompt(string caption, string message, System.Collections.Ob jectModel.Collection[System.Management.Automation.Host.Fie ldDescription] descriptions)} TypeNameOfValue : System.Management.Automation.PSMethod Value : System.Collections.Generic.Dictionary[string,psobject] Pro mpt(string caption, string message, System.Collections.Obj ectModel.Collection[System.Management.Automation.Host.Fiel dDescription] descriptions) Name : Prompt IsInstance : True

$Host.UI.Prompt.OverloadDefinitions le dará la (s) definición (es) del método. Cada definición se muestra como <Return Type> <Method Name>(<Parameters>) .