Я пытаюсь написать сценарий powershell, который открывает подключение к удаленному рабочему столу для каждого имени компьютера, сохраненного в текстовом файле. Когда я запускаю скрипт, он подключается только к первой машине в списке и выводит на консоль: CMDKEY: Credential added successfully
один раз (не один раз для каждой машины). mstcs
, похоже, завершает процесс после выполнения, и я не уверен, что правильно добавляю учетные данные. Может кто-то указать мне верное направление?
Вот несколько тестов, которые я пытался выяснить, что происходит:
- Печатать после
mstsc
. Не печатает. Кажется, что процесс завершается после вызоваmstcs
. Кажется, это суть вопроса. cmdkey /list
показывает все учетные данные, которые я сохранил, и их цели. Выходные данные не включают все цели, определенные в текстовом файле. Даже если я закомментируюmstsc
, тоcmdkey /add:$MachineName /user:$User /pass:$Password
, похоже, будет выполняться только для первой строки, о чем свидетельствует отсутствие большего количества выходных данных консоли иcmdkey /list
, не дающие ожидаемых целей. Кроме того, я добавил оператор печати после этой строкиcmdkey
, и он печатает для каждой строки, поэтому он не завершается после запуска (о чем я уже знал, потому чтоmstcs
выполняется после этой строки, когда она не закомментирована).
# Read from file
$Lines = Get-Content -Path .\machines.txt | Out-String
# For each machine ...
foreach($Line in $Lines){
# Split line, save name and domain
$Tokens = $Line.Split(".")
$MachineName = $Tokens[0]
$Domain = $Tokens[1]
$User = "someDomain\someUsername"
$Password="somePassword"
# Switch username if someOtherDomain
if ($Domain -eq "someOtherDomain"){
$User = "someOtherDomain\someOtherUsername"
}
#set credentials and open connection
cmdkey /add:$MachineName /user:$User /pass:$Password
mstsc /v:$MachineName /console
}
EDIT: я также пытался заменить mstsc /v:$MachineName
на Start-Process -FilePath "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$MachineName" -Wait
. В результате открывается сессия, а затем скрипт не завершается в консоли, но больше ничего не происходит.
| Out-String
— он берет отдельные строки, которые вы только что прочитали из файла, и превращает их в одну многострочную строку, поэтому ваш цикл завершается после однократного запуска. - person Mathias R. Jessen   schedule 20.11.2020