programing

PowerShell에서 사용자 입력 확인

minimums 2023. 4. 28. 20:25
반응형

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]::ReadLinePowerShell에 대한 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

반응형