Как да изпълните Powershell скрипт дистанционно, който изисква активен работен плот

Опитвам се да изпълня автоматизиран тест на отдалечен сървър. За да може тестът да се проведе, потребителят трябва да бъде удостоверен в система с помощта на десктоп приложение. По принцип, след като стартирате настолното приложение, се показва прозорец на GUI и след това въвеждате парола и натискате enter. След като потребителят бъде удостоверен, автоматичният тест може да започне.

Написах скрипт на Powershell, след което, когато се стартира, може да стартира GUI приложението, да въведете паролата, да натиснете OK и потребителят се удостоверява. Работи без никакви проблеми, ако съм влязъл в машината чрез активна връзка с отдалечен работен плот.

$password = "password"
& 'C:\Windows\GuiPassword.exe'
Start-Sleep -Seconds 60
$wshell = New-Object -ComObject wscript.shell; 
write-output "Focusing on the window"
$wshell.AppActivate('Gui Password') 
Sleep 2 
write-output "Entering the password string"
write-output "$wshell.SendKeys('$password')"
$wshell.SendKeys("$password")
$wshell.AppActivate('Gui Password') 
Sleep 2 
write-output "Entering Enter key"
$wshell.SendKeys('{ENTER}')
Sleep 10` 

Знам, че това се изпълнява, защото виждам, че въвежда паролата и след това натиска бутона OK, докато е влязъл чрез връзка с отдалечен работен плот. Също така показва „вярно“ в Powershell ISE, когато стигне до извикванията на AppActivate

Сега се опитах да изпълня този скрипт дистанционно чрез PS сесия от друга машина. Дистанционното управление е включено и конфигурирано правилно. Виждам, че скриптът се изпълнява, но не може да намери прозореца на GUI, защото виждам "фалшиви" низове да се показват на екрана на отдалечената машина, от която го изпълнявам. Това е скриптът на powershell, който изпълнявам от друга машина. Да приемем, че горният скрипт е записан като PowerShell скрипт, наречен GUILogin.ps1:

$tpassword = "password"
$secPasswd = ConvertTo-SecureString -AsPlainText -Force -String $tpassword
$myCreds = New-Object System.Management.Automation.PSCredential -argumentlist "REMOTESYSTEMUSERID", $secPasswd
$ps_Opt = New-PSSessionOption -IdleTimeout 43199999
$TargetSession = New-PSSession -ComputerName RemoteSystemname -Credential $myCreds -ConfigurationName RemoteExecution -SessionOption $ps_Opt
Write-Output "Session created"
Invoke-Command -Session $TargetSession  -Command {D:\Temp\GUILogin.ps1}    
Remove-PSSession $TargetSession

Предполагам, че не може да го намери, защото е десктоп приложение и изисква активен десктоп. Това вярно ли е? Можете ли да предложите какво мога да направя, за да може да се намери чрез PS сесията?

Благодаря ти


person My Display Name    schedule 21.11.2019    source източник
comment
Възможен дубликат на Стартиране на отдалечено GUI приложение в Powershell   -  person Bender the Greatest    schedule 21.11.2019
comment
Краткият отговор е, че не можете. Потенциално можете да използвате psexec или да използвате отдалеченото Task Scheduler чрез Powershell Remoting, но последното е хакерско и много фино, за да го направите правилно. Вижте връзката в дублирания коментар за това как можете да използвате psexec   -  person Bender the Greatest    schedule 21.11.2019
comment
Опитах се да използвам psexec -i, но продължавам да получавам следното съобщение за грешка: cmd излезе на ServerName с изходен код -1073741502 някаква идея защо се случва това?   -  person My Display Name    schedule 26.11.2019
comment
c:\Sysinternals\PsExec.exe -i \\ИМЕ НА СЪРВЪР -u ПОТРЕБИТЕЛ -p ПАРОЛА /accepteula cmd /c powershell -noninteractive -ExecutionPolicy Bypass -file C:\PowershellScript.ps1 е това, което използвах   -  person My Display Name    schedule 26.11.2019