@chifth

Как в .bat файле правильно вызвать другой bat и передать переменную?

Всем доброго дня. Помогите :)
Задача: Обновить ПК в домене до последней версии винды
Проблема: Не могу правильно составить батники для удобной работы
Что нужно: Батник следующего содержания-:
- Введите имя ПК: (тут я ввожу имя пк)
- psexec =Выводит информацию о введенном ПК (Локаль, билд десятки, версию винды, битность, свободное место на диске С)
- Меню выбора действий (которое запускает в новом окне скрипты следующего содержания):
--1. Залить и обновить RU x64 (installw10ru64.bat)
--2. Залить и обновить UA x64 (installw10ua64.bat)
--3. Залить и обновить RU x32 (installw10ru86.bat)
- возврат к старту (ввод имени пк). //для возможности запустить ещё одно обновление в новом окне.

В идеале, было бы круто сделать чтобы скрипт сам выбирал нужный скрипт исходя из версии винды и битности, но у меня не получилось загнать вывод psexec в переменную.

Мои наработки:
Скрипт 1 - Проверка информации о системе
@echo off
:start
set /P id=Enter PC Name:
psexec \\%id% powershell Get-UICulture; write-host "Windows 10 Build:" (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').ReleaseId; write-host "Windows Architrcture:" (Get-WmiObject win32_operatingsystem).osarchitecture; cmd /c ver;  Get-WmiObject Win32_LogicalDisk
pause
goto start


Скрипт 2 - Копирование дистрибутива с шары на диск С и запуск тихого обновления //пример батника installw10ru64.bat
:start
set /P id=Enter PC Name : 
robocopy /E /R:1 /W:1 "\\192.168.5.5\w10ru64" "\\%id%\c$\w10ru64"
psexec \\%id% c:\w10ru\setup.exe /auto upgrade /quiet /showoobe none /priority low /dynamicupdate disable
}
pause
goto start


Уважвемые гуру командной строки, помогите сверстать скрипт :)
- Если такое возможно - одним файлом, который будет запускать от того же имени другие окна с заданным скриптом копирования нужной папки и запуском обновления.
- Нужна проверка существования папки с дистрибутивом на целевом пк (тоже не сумел передать в переменную). Папки на диске С: (w10ru64, w10ua64, w10ru86).

Заранее огромное спасибо
  • Вопрос задан
  • 1477 просмотров
Пригласить эксперта
Ответы на вопрос 3
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Используйте Powershell и WinRM.
Для выбора действий внутри одного скрипта можно использовать if else, тогда не нужно будет выходить из него в другие скрипты.
Запуск инсталлятора в Powershell можно реализовать созданием Scheduled Task на каждой конкретной машине.
Ответ написан
@res2001
Developer, ex-admin
На сколько понял вся проблема у вас - обработать вывод psexec?
Для этого есть конструкция for /f
Например:
for /f "tokens=* delims=" %%a in ('psexec ... ') do ( 
  echo %%a
)

Так же можно перенаправить вывод psexec в файл, а затем в for /f уже читать файл.
Для справки: for /?
Ответ написан
Комментировать
gbg
@gbg
Любые ответы на любые вопросы
Использовать Python или bash. Серьезно, писать на батниках что-то длиннее пяти строчек - это выносить мозг себе с отладкой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы