programing

파워쉘 안에서 키스트로크를 수행하는 방법은?

mailnote 2023. 9. 8. 21:39
반응형

파워쉘 안에서 키스트로크를 수행하는 방법은?

vmware 클러스터 환경에서 몇 가지 정보를 가져올 수 있는 ps1 스크립트가 있습니다.

ps1 스크립트를 사용하려면 ENTER 버튼 키 입력이 필요합니다.

그럼, 어떻게 하죠?

-고맙습니다

제가 제대로 이해했다면, PowerShell에서 ENTER 키 입력을 대화형 애플리케이션으로 전송하시겠습니까?

$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Sleep 1
$wshell.SendKeys('~')

해당 대화형 애플리케이션이 PowerShell 스크립트인 경우에는 PowerShell 창의 제목 표시줄에 있는 내용을 AppActivate 인수(기본적으로 powershell.exe 경로)로 사용합니다.모호함을 방지하기 위해 스크립트의 창 제목을 변경할 수 있습니다.title 'new window title'지휘.

몇 가지 참고 사항:

  • 틸드(~)는 ENTER 키 스트로크를 나타냅니다.사용할 수도 있습니다.{ENTER}, 키패드의 ENTER 키입니다.전체 목록은 여기 http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx 에서 확인할 수 있습니다.
  • 그 이유는.Sleep 1명령문은 창이 활성화되는 데 잠시 걸리므로 1초를 기다려야 하며, 바로 SendKeys를 호출하면 PowerShell 창으로 또는 아무 곳으로도 키가 전송됩니다.
  • 대기 중인 시간 동안 아무 것이나 입력하거나 마우스를 클릭하면 이 문제가 해결될 수 있으므로 AppActivate(앱 활성화)로 활성화할 수 없습니다.시스템에서 안정적으로 충분한 최소값을 찾기 위해 시간을 줄이는 실험을 할 수 있습니다(수면은 소수점 이하를 허용하므로 0.5를 0.5초 동안 시도할 수 있습니다.2.6GHz Core i7 Win7 노트북에서 0.8초 미만이면 상당한 장애율이 발생합니다.안전을 위해 1초를 사용합니다.
  • 중요 경고: AppActivate를 호출하는 것과 SendKeys를 호출하는 것 사이에 다른 창을 활성화하면 암호가 일반 텍스트의 다른 창으로 전송되므로 이 방법을 사용할 때는 특히 주의해야 합니다.

때때로 wscript.의 SendKeys 메서드는 약간 까다로울 수 있으므로 문제가 발생하면 위의 네 번째 줄을 다음과 같이 바꿉니다.

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait('~');
function Do-SendKeys {
    param (
        $SENDKEYS,
        $WINDOWTITLE
    )
    $wshell = New-Object -ComObject wscript.shell;
    IF ($WINDOWTITLE) {$wshell.AppActivate($WINDOWTITLE)}
    Sleep 1
    IF ($SENDKEYS) {$wshell.SendKeys($SENDKEYS)}
}
Do-SendKeys -WINDOWTITLE Print -SENDKEYS '{TAB}{TAB}'
Do-SendKeys -WINDOWTITLE Print
Do-SendKeys -SENDKEYS '%{f4}'

"Enter" 키를 앱으로 보냅니다. 예를 들어 "확인"을 누르는 경우가 있습니다.잘 작동합니다.

Add-Type -AssemblyName microsoft.VisualBasic

Add-Type -AssemblyName System.Windows.Forms

# 원하는 프로세스를 가져옵니다.

$ProcessName = Get-Process -Name Calculator

시작-슬립 -초 1

# 프로세스가 실제로 실행 중인 경우에는 앞으로 가져갑니다.

If ($ProcessName)
{
   (New-Object -ComObject.Wscript.Shell).AppActivate((Get-Process $ProcessName -ErrorAction SilentlyContinue).MainWindowTitle)
}

# "Enter" 키를 앱으로 보냅니다.

[Microsoft.VisualBasic.Interaction]::AppActivate($ProcessName.ProcessName)
[System.Windows.Forms.SendKeys]::SendWait({'~'})

도.$wshell = New-Object -ComObject wscript.shell;백그라운드에서 실행중인 스크립트를 도와주었고, 그것은 단지 추가하기만 해도 잘 작동했습니다.$wshell했습니다! . 배경으로 실행되는 것을 고쳤습니다![Microsoft.VisualBasic.Interaction]::AppActivate("App Name")

사용자 이름 및 암호 인증 후 원격 데스크톱 연결의 경우 회사 정책별로 경고 메시지를 요청합니다. enter 명령이 이를 수락하지 않습니다. 확인하는 방법

언급URL : https://stackoverflow.com/questions/17849522/how-to-perform-keystroke-inside-powershell

반응형