Как отправить ключи / ввод в процесс, который выполняется без входа в систему с помощью powershell? - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблема с автоматизацией установки приложения с помощью powershell. Частью установки является запуск инструмента командной строки с параметрами и ввод учетных данных для доступа к базе данных. Это должно быть сделано без входа в систему. Для этого я использовал запланированные задачи для запуска моих скриптов при запуске системы.

Я пытался заставить этот конкретный шаг работать, используя AppActivate и SendWait для отправки учетных данных в окно. Это не работает, хотя, так как нет интерактивного окна, если я использую планировщик задач.

Это текущий скрипт, который я использовал. Это работает, если бы я использовал ключ RunOnce, например.

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")

powershell.exe add-type -AssemblyName microsoft.VisualBasic

add-type -AssemblyName System.Windows.Forms

$parms = 'create instance'

Start-Process "app.exe" -ArgumentList $parms -WorkingDirectory "C:\app\app.exe"

start-sleep -Milliseconds 1000

[Microsoft.VisualBasic.Interaction]::AppActivate("C:\app\app.exe")

[System.Windows.Forms.SendKeys]::SendWait("username")

start-sleep -Milliseconds 1000

[Microsoft.VisualBasic.Interaction]::AppActivate("C:\app\app.exe")

[System.Windows.Forms.SendKeys]::SendWait("password")

Этот скрипт вызывается другим скриптом, который запускается планировщиком задач. Сейчас это не с:

Exception calling "AppActivate" with "1" argument(s): "Process '{0}' was not found."

и

Exception calling "SendWait" with "1" argument(s): "Access is denied"

Это связано с невозможностью доступа к окну.

Есть ли способ отправить имя пользователя и пароль процессу, не требуя активных окон? Из того, что я видел, похоже, что не поддерживается PowerShell, но я все еще надеюсь, что есть способ. Может быть, с помощью ручек? Я не могу использовать любые приложения, такие как AutoHotkey или AutoIt.

1 Ответ

0 голосов
/ 12 декабря 2018

Попробуйте,

    $proc = Get-process | where {$_.path -eq "C:\app\app.exe"}
    [Microsoft.VisualBasic.Interaction]::AppActivate($Proc.id)
...