首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PowerShell中提示用户输入

在PowerShell中提示用户输入
EN

Stack Overflow用户
提问于 2011-11-18 22:41:54
回答 3查看 507.5K关注 0票数 227

我希望提示用户输入一系列信息,包括密码和文件名。

我有一个使用host.ui.prompt的例子,这似乎是合理的,但我不能理解返回。

有没有更好的方法在PowerShell中获取用户输入?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-18 23:35:22

Read-Host是从用户获取字符串输入的简单选项。

代码语言:javascript
复制
$name = Read-Host 'What is your username?'

要隐藏密码,可以使用以下命令:

代码语言:javascript
复制
$pass = Read-Host 'What is your password?' -AsSecureString

要将密码转换为纯文本,请执行以下操作:

代码语言:javascript
复制
[Runtime.InteropServices.Marshal]::PtrToStringAuto(
    [Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))

至于$host.UI.Prompt()返回的类型,如果您在@Christian的评论中发布的链接上运行代码,就可以通过管道将其传递给Get-Member (例如,$results | gm)来查找返回类型。结果是一个字典,其中键是提示符中使用的FieldDescription对象的名称。要访问链接示例中第一个提示符的结果,可以输入:$results['String Field']

要在不调用方法的情况下访问信息,请去掉括号:

代码语言:javascript
复制
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将给出该方法的定义。每个定义都显示为<Return Type> <Method Name>(<Parameters>)

票数 365
EN

Stack Overflow用户

发布于 2011-11-23 10:11:40

使用参数绑定绝对是解决这个问题的方法。它不仅编写起来非常快(只需将[Parameter(Mandatory=$true)]添加到您的强制参数之上),而且它也是您以后不会讨厌自己的唯一选择。

更多信息如下:

[Console]::ReadLine被PowerShell的FxCop规则明确禁止。为什么?因为它只适用于PowerShell.exe,而不适用于PowerShell ISEPowerGUI等。

简单地说,Read-Host是一种糟糕的形式。Read-Host无法控制地停止脚本以提示用户,这意味着您永远不能拥有包含使用Read-Host的脚本的其他脚本。

您正在尝试请求参数。

您应该使用[Parameter(Mandatory=$true)]属性并正确键入来请求参数。

如果您在[SecureString]上使用此选项,它将提示输入密码字段。如果您在凭据类型([Management.Automation.PSCredential])上使用此选项,则会弹出凭据对话框(如果参数不在那里)。字符串只会变成一个普通的老式文本框。如果将HelpMessage添加到参数属性(即[Parameter(Mandatory = $true, HelpMessage = 'New User Credentials')]),则它将成为提示的帮助文本。

票数 76
EN

Stack Overflow用户

发布于 2014-11-24 00:40:32

或者,也可以将其添加为脚本参数,作为脚本执行的一部分输入

代码语言:javascript
复制
 param(
      [Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value1,
      [Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value2
      )
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8184167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档