Попытка l oop набора команд в PowerShell - PullRequest
1 голос
/ 17 января 2020

Я новичок в написании сценариев в целом и пытаюсь решить задачу написания сценариев PowerShell для автоматизации принятия ключей RSA от PuTTY на примерно 15 000 серверов в моей организации. У меня есть серверы, сохраненные в файле .bat, и при запуске он будет автоматически входить через PuTTY. Проблема в том, когда он входит в систему. Появится окно безопасности RSA, требующее от меня нажатия «y», у меня есть эта часть, и закрытие PuTTY, чтобы был загружен следующий экземпляр, единственная проблема - я не могу получить процесс до l oop , Я ищу руководство по этому вопросу.

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 



#Variables
$batFile = Start-Process -FilePath "C:\Users\UID\OneDrive - CompanyA\PS Scripts\puttyRSA.bat";
New-Object -ComObject wscript.shell;


#opens the "puttyRSA.bat" file

$batFile

#Loops everything
do{

# Will click "Y"
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('title of the application window')
Start-Sleep -Seconds 3
$wshell.SendKeys('y')

#Waits and closes putty
Start-Sleep -Seconds 3
Stop-Process -name putty
}
While (-FilePath puttyRSA.bat=running)here

1 Ответ

1 голос
/ 17 января 2020

Если вы хотите продолжить работу до завершения $batFile, ваше предложение while недопустимо в PowerShell. Здесь вам нужно будет внести два изменения.

Во-первых, вам нужно запустить $batFile с Start-Process, чтобы вы могли получить PID для ожидания:

# -PassThru is required because by default Start-Process doesn't return an object
$processId = ( Start-Process -FilePath $batFile -PassThru ).Id

Тогда для вашего while предложения:

} while ( Get-Process -Id $processId 2>$null )

Это будет поддерживать работу вашего l oop до тех пор, пока не завершится процесс, принадлежащий $batFile. 2>$null перенаправляет поток ошибок на $null, поэтому он не будет отображать ошибку, когда процесс больше не будет найден.

Подробнее о выходных потоках и перенаправлении можно узнать на my ответ здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...