PowerShell에서 사용자 입력을위한 프롬프트
암호와 파일 이름을 포함한 일련의 입력을 요구하는 메시지를 표시하고 싶습니다.
나는 host.ui.prompt
합리적인 것으로 보이는 사용 예제를 가지고 있지만 반환을 이해할 수는 없습니다.
PowerShell에서 사용자 입력을 얻는 더 좋은 방법이 있습니까?
Read-Host
사용자로부터 문자열 입력을 얻는 간단한 옵션입니다.
$name = Read-Host 'What is your username?'
비밀번호를 숨기려면 다음을 사용할 수 있습니다.
$pass = Read-Host 'What is your password?' -AsSecureString
비밀번호를 일반 텍스트로 변환하려면 다음을 수행하십시오.
[Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))
로 반환 된 유형은 $host.UI.Prompt()
@Christian의 설명에 게시 된 링크에서 코드를 실행하면 반환 유형을 Get-Member
(예 :)로 파이프하여 찾을 수 있습니다 $results | gm
. 결과는 키가 FieldDescription
프롬프트에 사용 된 객체 의 이름 인 사전 입니다. 링크 된 예제에서 첫 번째 프롬프트의 결과에 액세스하려면 다음을 입력하십시오 $results['String Field']
..
메소드를 호출하지 않고 정보에 액세스하려면 괄호를 끄십시오.
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>)
.
매개 변수 바인딩을 사용하는 것이 분명합니다. 쓰기가 매우 빠를뿐만 아니라 ( [Parameter(Mandatory=$true)]
필수 매개 변수 위에 추가 하기 만하면 ) 나중에 나 자신을 미워하지 않는 유일한 옵션이기도합니다.
더 아래 :
[Console]::ReadLine
PowerShell 의 FxCop 규칙에 의해 명시 적으로 금지됩니다 . 왜? PowerShell ISE , PowerGUI 등이 아닌 PowerShell.exe에서만 작동하기 때문에
Read-Host 는 아주 간단히 나쁜 형태입니다. Read-Host는 제어 할 수없이 스크립트를 중지하여 사용자에게 프롬프트합니다. 즉, Read-Host를 사용하는 스크립트를 포함하는 다른 스크립트를 가질 수 없습니다.
매개 변수를 요청하려고합니다.
[Parameter(Mandatory=$true)]
매개 변수를 요청 하려면 속성과 올바른 입력을 사용해야합니다 .
에서 이것을 사용하면 [SecureString]
암호 필드를 묻는 메시지가 나타납니다. 자격 증명 유형 ( [Management.Automation.PSCredential]
) 에서이 옵션을 사용 하면 매개 변수가 없으면 자격 증명 대화 상자가 나타납니다. 문자열은 그냥 평범한 텍스트 상자가됩니다. 매개 변수 속성 (즉, [Parameter(Mandatory = $true, HelpMessage = 'New User Credentials')]
)에 HelpMessage를 추가 하면 프롬프트에 대한 도움말 텍스트가됩니다.
이것을 스크립트 상단에 놓으십시오. 스크립트가 사용자에게 암호를 묻는 메시지를 표시합니다. 그런 다음 결과 비밀번호는 $ pw 를 통해 스크립트의 다른 곳에서 사용할 수 있습니다 .
Param(
[Parameter(Mandatory=$true, Position=0, HelpMessage="Password?")]
[SecureString]$password
)
$pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
방금 읽은 비밀번호의 값을 디버그하고 보려면 다음을 사용하십시오.
write-host $pw
As an alternative, you could add it as a script parameter for input as part of script execution
param(
[Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value1,
[Parameter(Mandatory = $True,valueFromPipeline=$true)][String] $value2
)
참고URL : https://stackoverflow.com/questions/8184167/prompt-for-user-input-in-powershell
'development' 카테고리의 다른 글
VI가 커밋 메시지를 기다리는 화면에있을 때 Git 커밋을 어떻게 중지합니까? (0) | 2020.05.12 |
---|---|
C #에서 개체가 null인지 확인 (0) | 2020.05.12 |
C 상태 머신 설계 (0) | 2020.05.12 |
알림 클릭에서 활동으로 매개 변수를 보내는 방법은 무엇입니까? (0) | 2020.05.12 |
코드 숨김 [중복]에서 ASP.Net 페이지의 URL 가져 오기 (0) | 2020.05.12 |