Я хочу остановить приложение winform на удаленном компьютере из локального сценария powershell, но функция CloseMainWindow
не работает
--- Это локальная команда для подключения удаленного сервера для выполнения closeApp.ps1, который хранится на сервере--
$remoteSession = New-PSSession -computerName 'xxx' -credential $cred
Invoke-Command -session $remoteSession -command {F:\AutoDeployment\closeApp.ps1}
Remove-pSSession -session $remoteSession
--- Это основное содержимое файла closeApp.ps1, который получает активный процесс и пытается его закрыть--
$app = Get-Process AppName -ErrorAction SilentlyContinue
if($app)
{
$app.MainWindowTitle
$app.CloseMainWindow()
}
Я ожидаю, что это должно действовать как локальный, который должен правильно закрыть приложение.
Но теперь он возвращает null для строки mainWindowTitle
и False для строки closeMainWindow
. Этот скрипт отлично работает, если выполняется напрямую на сервере, но когда он выполняется через invoke-command
, MainWindow
кажется недействительным и не работает.
Я вызываю эту команду через плагин jenkins powershell
Обновления:
Нет журнала ошибок через invoke-command
для closeMainWindow
, но он всегда возвращает «False», который должен быть «True».
Более того, у меня есть еще один шаг, который попытается отправить ключевые действия, чтобы остановить это приложение, если closeMainWindow
не удалось. Я использую [System.Windows.Forms.SendKeys]::SendWait
для этого. Он также работает локально, но не работает через invoke-command
на сервере с журналом:
журнал ошибок для sendkeys
:
Exception calling "SendWait" with "1" argument(s): "Access is denied"
+ CategoryInfo : NotSpecified: (Exception calli...cess is denied":String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
closeMainWindow
является функцией класса Process вместо Forms, хотя я добавил загрузку сборки в свои сценарии для «System.Windows.Forms» и «Microsoft.VisualBasic» для дальнейшего использования, но он все еще возвращает False наcloseMainWindow
11.12.2017