21

Tôi có tập lệnh ps1 để lấy một số thông tin từ môi trường cụm vmware.Làm thế nào để thực hiện phím tắt bên trong PowerShell?

Ở một số nơi, tập lệnh ps1 yêu cầu phím tắt ENTER.

Vì vậy, Cách thực hiện điều đó?

-Cảm ơn

+1

Đó là kịch bản tôi đã viết, yêu cầu tổ hợp phím ** ENTER **. thay vì nhấn nút ** nhập ** mọi lúc, chỉ cần tôi muốn tự động hóa. – HamTheAstroChimp

+0

Tại sao phải nhấn enter? Bạn đang thực hiện máy chủ lưu trữ đọc? –

+0

Bản ghi liên tục đăng nhập/đăng xuất từ ​​một số máy. Vào thời điểm đăng xuất, yêu cầu xác nhận, vì vậy tôi phải nhấn nút ** nhập **. Đây là lý do tôi muốn tự động hóa. – HamTheAstroChimp

Trả lời

29

Nếu tôi hiểu đúng, bạn muốn PowerShell để gửi ENTER tổ hợp phím cho một số ứng dụng tương tác?

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

Nếu mà ứng dụng tương tác là một kịch bản PowerShell, chỉ cần sử dụng bất cứ thứ gì trên thanh tiêu đề của cửa sổ PowerShell như là đối số để AppActivate (theo mặc định, các đường dẫn đến powershell.exe). Để tránh sự mơ hồ, bạn có thể yêu cầu tập lệnh của bạn đặt lại một cửa sổ riêng bằng cách sử dụng lệnh title 'new window title'.

Một vài lưu ý:

  • Các dấu ngã (~) đại diện cho ENTER tổ hợp phím. Bạn cũng có thể sử dụng {ENTER}, mặc dù chúng không giống nhau - đó là phím ENTER của bàn phím. Một danh sách đầy đủ có sẵn tại đây: http://msdn.microsoft.com/en-us/library/office/aa202943%28v=office.10%29.aspx.
  • Lý do cho tuyên bố Sleep 1 là chờ 1 giây vì phải mất một chút thời gian để cửa sổ kích hoạt và nếu bạn gọi SendKeys ngay lập tức, nó sẽ gửi các phím đến cửa sổ PowerShell hoặc không đến đâu.
  • Hãy nhận biết rằng điều này có thể vấp lên, nếu bạn gõ bất cứ điều gì hoặc nhấp chuột trong lần thứ hai mà nó chờ đợi, ngăn chặn cửa sổ bạn kích hoạt với AppActivate từ việc tích cực. Bạn có thể thử nghiệm với việc giảm lượng thời gian để tìm mức tối thiểu đủ chắc chắn trên hệ thống của mình (Ngủ chấp nhận số thập phân, vì vậy bạn có thể thử .5 trong nửa giây). Tôi thấy rằng trên máy tính xách tay Core i7 Win7 2,6 GHz của tôi, bất cứ điều gì ít hơn 0,8 giây có một tỷ lệ thất bại đáng kể. Tôi sử dụng 1 giây để được an toàn.
  • CẢNH BÁO QUAN TRỌNG:Hãy cẩn thận nếu bạn đang sử dụng phương pháp này để gửi một mật khẩu, vì kích hoạt một cửa sổ khác nhau giữa cách gọi AppActivate và gọi SendKeys sẽ làm cho mật khẩu sẽ được gửi đến đó cửa sổ khác trong văn bản thuần túy!

Đôi khi wscript.shell 's SendKeys phương pháp có thể là một chút kỳ quặc, vì vậy nếu bạn gặp sự cố, thay thế dòng thứ tư trên với điều này:

Add-Type -AssemblyName System.Windows.Forms 
[System.Windows.Forms.SendKeys]::SendWait('~'); 
+0

Cảm ơn bổ sung Thêm Loại đó vào cuối. Đã đập đầu tôi vào tường trong một giờ cố gắng để có được kịch bản của tôi làm việc. – sliderhouserules

Các vấn đề liên quan