Сеанс Powershell RDP и сценарий командной строки

То, что я пытаюсь сделать, кажется довольно простым, но я не могу этого понять. Я хочу запустить сценарий Powershell для запуска сеанса RDP, скопировать файл в каталог c: \, а затем запустить этот файл из командной строки. Я хотел бы, чтобы он зацикливался, получая параметры из файла csv, такие как IP-адрес сервера, имя пользователя и пароль. Итак, по сути, шаги будут следующими ...

  1. импортировать информацию из файла csv для определения переменных
  2. скопировать указанный файл (затем зациклить)
  3. запустить mstsc.exe
  4. введите IP сервера, имя пользователя, пароль
  5. вставить скопированный файл в каталог c: \
  6. запустить cmd.exe
  7. Запустите файл, который был скопирован в каталог c: \
  8. выйти с сервера

Я хотел посмотреть, может ли кто-нибудь помочь мне с этим. Я новичок в Power Shell и со многими из них смог поработать. Если бы кто-то мог указать мне правильное направление или даже предоставить мне код для заполнения пробелов, я был бы очень рад этому.


person user1462832    schedule 20.06.2012    source источник


Ответы (2)


Я выполнил удаленную установку с помощью psexec. psexec \\servername -u domain\usernamr -p password cmd /c "msiexec /i program.msi

Загрузка PSexec: https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

Это означает, что вместо RDP вы будете использовать psexec для удаленного запуска установки.

Для начала я создал небольшой сценарий PowerShell. Итак, предположим, что ваш CSV-файл (c: \ info.csv) имеет три столбца ServerName, UserName, Password.

Запустите приведенный ниже код, и он должен работать, но убедитесь, что изменили первые 4 строки в соответствии с вашей средой. Начните с установки одного сервера для наблюдения за поведением скрипта.

# Set intial variables
$CSVFile = "c:\info.csv"
$MSI = "\\servername\sharename\setup.msi"
$MSILog = "c:\Windows\temp\setup.log"
$Domain = "YourDomain"

# Import info from CSV file
$Servers = import-csv $CSVFile


# loop through each server
foreach ($server in $servers) {
         # run psexec on each server to install a program
         psexec \\$server.servername -u $Domain\$server.username -p $server.password -h cmd /c "msiexec /i $MSI /quite /l*v $MSILog"

}
person LT-    schedule 17.08.2018

Я рекомендую вам использовать эту команду, потому что я не совсем понимаю, что вы пытаетесь сделать.

Get-help Import-CSV
Get-help about_remoting это позволит избежать выполнения за вас mstsc.exe.

Войдите в сеанс и Invoke-Command против этого сеанса, и вы можете запускать команды на этом сервере. $ session = New-PSSession -ComputerName Server1 -Credentials Get-Credential
Invoke-Command -Session $ session -ScriptBlock {

}

Внутри блока Script укажите команду PowerShell для копирования файлов и их запуска.

person Mitul    schedule 20.06.2012
comment
Чтобы быть более конкретным в отношении того, что я пытаюсь сделать, это установить агент на машину. Процесс повлечет за собой вход на сервер через rdp, запуск пакета автоматической установки (msi) из командной строки и все. Я бы хотел предоставить своему клиенту электронную таблицу и попросить его заполнить данные, такие как адрес сервера, имя пользователя и пароль. I и обращаются к CSV, запускают powershell и устанавливают многие агенты с помощью этого сценария, что по сути является автоматическим процессом. Надеюсь, это немного лучше объясняет. - person user1462832; 20.06.2012
comment
Любая помощь о том, как я могу запустить и запустить mstsc.exe и попытаться сделать то, что я хочу сделать? Я пробовал pssession, и это была бы отличная альтернатива, однако для этого потребовалась бы дополнительная конфигурация на стороне моих клиентов, поэтому это не было бы вариантом ' - person user1462832; 21.06.2012
comment
Вы можете запустить mstsc.exe с помощью PowerShell, но тогда вам придется вручную выполнить задачу оттуда. С помощью PSSessions вы заходите на этот сервер и запускаете команды на этом сервере. - person Mitul; 21.06.2012
comment
разве вам не нужно включать сеансы PSSession на всех серверах, с которыми я хочу установить соединение? Если это так, это устранило бы необходимость, так как мне нужно было бы получить к ним доступ только один раз, чтобы запустить одну команду для автоматической установки. - person user1462832; 22.06.2012
comment
Вы включили удаленное взаимодействие на всех этих серверах. да. Включить-PSRemoting - person Mitul; 22.06.2012