PowerShell: avvio applicazione e input

Talvolta può essere utile avviare delle applicazioni e simulare la pressione di tasti per riuscire ad automatizzare delle operazioni che non è possibile eseguire, ad esempio, tramite riga di comando.

Un esempio di questo approccio lo avevo trattato nel post Telnet script dove tramite VBScript veniva automatizzata una sessione Telnel.

Ovviamente è possibile eseguire tale automazione anche tramite PowerShell sfruttano metodi offerit da classi .NET.

Di seguito analizzeremo come sia possibile convertire il seguente script VBSript che apre notepad e scrive un testo di esempio:

‘Avvio NotePad
Set oShell = WScript.CreateObject(“WScript.Shell”)
oShell.Run “%windir%\notepad.exe”

‘Attesa avvio applicazione di 1 sec
WScript.Sleep 1000

‘Invio pressione tasti
oShell.SendKeys “Testo di esempio riga 1”
oShell.SendKeys “{ENTER}”
oShell.SendKeys “Powered by VBScript”

‘Apertura opzione Salva con nome del menu File (Alt+f+v)
oShell.SendKeys “%fv”

‘Attesa apertura menu 0.5 sec
WScript.Sleep 500

E’ possibile convertire in PowerShell il precedente script utilizzando la classe System.Windows.Forms.SendKeys del .NET Framework come indicato in Converting the Windows Script Host SendKeys Method:

# Load Assebly System.Windows.Forms 
[void] [System.Reflection.Assembly]::LoadWithPartialName(“‘System.Windows.Forms”)

# Avvio NotePad
& “$env:WINDIR\notepad.exe”

# Attesa avvio applicazione di 1 sec
Start-Sleep -m 1000

# Invio pressione tasti
[System.Windows.Forms.SendKeys]::SendWait(“Testo di esempio riga 1”)
[System.Windows.Forms.SendKeys]::SendWait(“{ENTER}”)
[System.Windows.Forms.SendKeys]::SendWait(“Powered by PowerShell”)

# Apertura opzione Salva con nome del menu File (Alt+f+v)
[System.Windows.Forms.SendKeys]::SendWait(“%fv”)

# Attesa apertura menu 0.5 sec
Start-Sleep -m 500

Si noti che anche se non esiste un cmdlet specifico per eseguire il SendKey lo script PowerShell contiene lo stesso numero di istruzioni di quello VBScript con l’innegabile vantaggio di avere a disposizione la possibilità di utilizzare le classi del .NET Framework.

Si ricordi che per eseguire gli script occorre configurare l’Execution Policy impostandola ad esempio a RemoteSigned, a riguardo si veda l’help del cmdlet Set-ExecutionPolicy.

Per ulteriori informazioni si vedano anche i post: