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의 댓글에 게시된 링크에서 코드를 실행한다면, 당신은 그것을 파이프로 연결함으로써 반환 유형을 알 수 있습니다 (예를 들어,$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에서만 작동하기 때문입니다.
읽기-호스트는 매우 간단하게 잘못된 형식입니다.읽기-호스트는 제어할 수 없이 스크립트를 중지하여 사용자에게 메시지를 표시합니다. 즉, 읽기-호스트를 사용하는 스크립트가 포함된 다른 스크립트를 사용할 수 없습니다.
매개 변수를 요청하려고 합니다.
다음을 사용해야 합니다.[Parameter(Mandatory=$true)]
속성을 입력하고 올바른 입력을 통해 매개 변수를 클릭합니다.
이것을 사용하는 경우[SecureString]
암호 필드를 입력하라는 메시지가 표시됩니다.자격 증명 유형에서 이 항목을 사용하는 경우, ([Management.Automation.PSCredential]
), 매개 변수가 없는 경우 자격 증명 대화 상자가 팝업됩니다.문자열은 일반적인 오래된 텍스트 상자가 됩니다.매개 변수 속성에 도움말 메시지를 추가하는 경우(즉,[Parameter(Mandatory = $true, HelpMessage = 'New User Credentials')]
그러면 프롬프트에 대한 도움말 텍스트가 됩니다.
이것을 스크립트의 맨 위에 놓습니다.그러면 스크립트가 사용자에게 암호를 입력하라는 메시지를 표시합니다.그러면 $pw를 통해 스크립트의 다른 곳에서 결과 암호를 사용할 수 있습니다.
Param(
[Parameter(Mandatory=$true, Position=0, HelpMessage="Password?")]
[SecureString]$password
)
$pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
디버깅하여 방금 읽은 암호의 값을 확인하려면 다음을 사용합니다.
write-host $pw
또는 스크립트 실행의 일부로 입력에 대한 스크립트 매개 변수로 추가할 수 있습니다.
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
'programing' 카테고리의 다른 글
깃허브 같은 깃서버? (0) | 2023.05.03 |
---|---|
내 이미지가 흐릿해요!WPF의 SnapToDevicePixels가 작동하지 않는 이유는 무엇입니까? (0) | 2023.04.28 |
스크롤 뷰어의 하위 요소가 마우스 휠로 스크롤하지 못하게 합니까? (0) | 2023.04.28 |
프로그래밍 방식으로 탐색 제목 변경 (0) | 2023.04.28 |
kubernetes에서 배포/이미지를 삭제하는 방법 (0) | 2023.04.28 |