파워쉘 안에서 키스트로크를 수행하는 방법은?
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
'programing' 카테고리의 다른 글
| Android Gradle Apache HttpClient가 존재하지 않습니까? (0) | 2023.09.08 |
|---|---|
| 어떻게 하면 녹아웃 JS가 초점 손실 대신 키 누름으로 데이터를 바인딩할 수 있습니까? (0) | 2023.09.08 |
| 메시지가 표시된 후 페이지 다시 로드, jQuery (0) | 2023.09.03 |
| 커밋 메시지 없이 Git 커밋 (0) | 2023.09.03 |
| mariadb: 업데이트에서 "IN" 폐쇄 쿼리 실행 (0) | 2023.09.03 |