Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вывести в лог большой cmd с экрана (http://forum.oszone.net/showthread.php?t=342827)

Shulzzz 05-11-2019 15:10 2894871

Вывести в лог большой cmd с экрана
 
Имеется скрипт в cmd, который обрабатывает последовательность команд, нужно результат его работы видеть на экране и одновременно записывать это все в лог,
способ сначала записать в лог >d:\log.txt, а потом его просмотреть type d:\log.txt не подходит, нужно в реале наблюдать что происходит, а потом еще иметь возможность посмотреть нормальный лог, как на экране, а не те непонятные куски, что записывает выше указанная команда, уже все интернеты облазил ничего внятного кроме огромных непонятных простыней не нашел, не смотря на то что этот вопрос поднимался давным давно и не раз.

alpap 05-11-2019 15:58 2894882

Цитата:

Цитата Shulzzz
Имеется скрипт в cmd »

Цитата:

Цитата Shulzzz
посмотреть нормальный лог, как на экране, а не те непонятные куски »

мил человек, да чтобы вам помочь, код-то показать просто придется, а еще и вероятно внутренности лога, а еще и пояснить насчет просмотра выполнения в реальном времени, потому как некоторые команды отрабатывают очень быстро и "бесшумно" и вероятно придется добавлять задержку и доп. команды.

Shulzzz 05-11-2019 19:27 2894907

alpap, Приветствую, циферки с датами я сам раставлю где нужно, код думаю врятли Вам о чем нибудь скажет, эксперементирую с созданием сборок в автоматическом режиме, часто вношу изменения в скрипт, проверяю что будет, вообщем было бы очень удобно если бы все писалось не только на экране но и в лог, говорят в линухе это легко реализуется всего одной командой, неужели в cmd или на худой конец в PowerShell не придумано ничего похожего?

Скрытый текст
chcp 1251
rem Отключаем антивирь
Powershell -File "%~dp0ps\10\off.ps1"

echo %date% %time:~-11,8%
rem Создаем папку для будуещего wim файла, который будем изменять
rd /s /q %~dp0OS\64\
md %~dp0OS\64\Orig\

rem Копируем оригинальный wim во вновь созданую папку
copy E:\cd-roms\OS\cur\64\install.wim %~dp0OS\64\orig\

rem Создаем папку для монтирования
md %~dp0mount

echo %date% %time:~-11,8%
rem Монтируем оргинал для изменения в Dism++ и NtLite
Dism /Mount-Wim /WimFile:%~dp0OS\64\orig\install.wim /index:1 /MountDir:%~dp0mount

echo %date% %time:~-11,8%
rem Насилуем оригинальный образ в дисм
start /wait %~dp0Install\Dism\Dism++x64.exe

echo %date% %time:~-11,8%
rem Добавляем в автозагрузку скрипт для начала установки софта и настроек после выхода на раб стол
reg load HKLM\start %~dp0mount\users\Default\NTUSER.DAT
reg add HKEY_LOCAL_MACHINE\start\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "Start" /d "d:\w10Home.cmd" /f
reg unload HKLM\start

rem Добавляем ассоциации файлам
Dism.exe /Image:%~dp0mount /Import-DefaultAppAssociations:%~dp0Install\fileassoc.xml

echo %date% %time:~-11,8%
rem Насилуем оригинальный образ в NtLite
"C:\Program Files\NTLite\NTLite.exe" /loadimage:"%~dp0OS\64\orig\install.wim" /imageindex:1 /loadpreset:"win10" /exitAfter:1
md %~dp0mount

echo %date% %time:~-11,8%
rem Сохраняем изменения в рар на всякий случай
"C:\program files\winrar\rar.exe" a "%~dp0imageVB\aftrNt64.rar" "%~dp0OS\64\orig\Install.wim"
copy %~dp0imageVB\aftrNt64.rar E:\cd-roms\OS\cur

echo %date% %time:~-11,8%
rem Очищаем папку виртуальной машины
rd /s /q %~dp0vb\10x64

rem Распаковываем пердварительно подготовленную папку с чистой виртуальной машиной для работы с ней
"c:\program files\winrar\rar.exe" x %~dp0vb\10x64.rar %~dp0vb\

rem Переназначаем букву дискам, что бы нужному была присвоена буква G:
ReMount F: W:
ReMount G: Y:

rem Монтируем чистый виртуальный носитель на хост
vmount attach %~dp0vb\10x64\10x64.vhd

echo %date% %time:~-11,8%
rem Применяем к нему измененый в дисм++ и нтлайт образ
dism /Apply-Image /Imagefile:%~dp0Install\boot.wim /index:1 /ApplyDir:F:\
dism /Apply-Image /Imagefile:%~dp0OS\64\orig\install.wim /index:1 /ApplyDir:G:\

rem Добавляем файл ответов, чтобы сразу перейти в режим аудита после развертывания и начать установку софта
md G:\Windows\Panther\
copy %~dp0Install\Unattend\pe\Unattend.xml G:\Windows\Panther\

rem Демонтируем виртуальный носитель с образом
vmount detach %~dp0vb\10x64\10x64.vhd

rem Переносим cd с софтом и настройками в рабочую папку
move %~dp0cd-roms\10\HOME\Windows10.iso %~dp0cd-roms\

rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe

echo %date% %time:~-11,8%
rem Первый раз запускаем виртуальную машину и дожидаемся установки софта и настроек
"c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -s 10x64 -v on

rem Переносим cd с софтом обратно в хранилище
move %~dp0cd-roms\Windows10.iso %~dp0cd-roms\10\HOME\

echo %date% %time:~-11,8%
rem Сохраняем хомку без обновлений и сиспреп в rar для последующей доустановки Office, обновлений и т.п.
del "%~dp0imageVB\10x64Homewim.rar"
"C:\program files\winrar\rar.exe" a "%~dp0imageVB\10x64Homewim.rar" "%~dp0vb\10x64"


rem Переносим cd с апдэйтами в рабочую папку
move %~dp0cd-roms\10\UPD\Windows10.iso %~dp0cd-roms\

rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe

echo %date% %time:~-11,8%
rem Запускаем настроеную вирутальную машину с Home для обновления
"c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -s 10x64 -v on

rem Переносим cd с апдэйтами обратно в хранилище
move %~dp0cd-roms\Windows10.iso %~dp0cd-roms\10\UPD\

echo %date% %time:~-11,8%
rem Переназначаем букву дискам, что бы нужному была присвоена буква G:
ReMount F: W:
ReMount G: Y:

rem Присоединяем виртуальный диск
vmount attach %~dp0vb\10x64\10x64.vhd

rem Создаем папку для будущего wim файла, с настроенной Home
md %~dp0OS\64\Home\

echo %date% %time:~-11,8%
rem Заливаем в wim настроенную Home
Dism /Capture-Image /ImageFile:%~dp0OS\64\Home\install.wim /CaptureDir:G:\ /Name:"Windows 10 Home x64" /Description:"Windows 10 Home x64"

rem Отсоединяем виртуальный диск
vmount detach %~dp0vb\10x64\10x64.vhd

rem создаем папку для монтирования (на всякий случай)
md %~dp0mount

echo %date% %time:~-11,8%
rem Запускаем повышение редакции до Pro
DISM /Export-Image /SourceImageFile:%~dp0OS\64\Home\install.wim /SourceIndex:1 /DestinationImageFile:%~dp0OS\64\Home\install.wim /DestinationName:"Windows 10 Pro x64"
DISM /Mount-Image /ImageFile:%~dp0OS\64\Home\install.wim /Index:2 /MountDir:%~dp0mount
DISM /Image:%~dp0mount /Set-Edition:Professional
Dism /Unmount-Wim /MountDir:%~dp0mount /Commit

echo %date% %time:~-11,8%
rem Готов образ с двумя редакциями для установки на работу в офис, нет ниодной не лицензионной программы

rem Дальше

rem Отключаем антивирь
Powershell -File "%~dp0ps\10\off.ps1"

echo %date% %time:~-11,8%
rem Распаковываем Vb с настроенным Home из рар обратно
rd /s /q %~dp0vb\10x64
"c:\program files\winrar\rar.exe" x "%~dp0imageVB\10x64Homewim.rar" %~d0\

rem Переносим cd с Office в рабочую папку
move %~dp0cd-roms\10\OFFICE\Windows10.iso %~dp0cd-roms\

rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe

echo %date% %time:~-11,8%
rem Запускаем vb доустанавливаем офис и т.п.
"c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -s 10x64 -v on

rem Переносим cd с Office в хранилище
move %~dp0cd-roms\Windows10.iso %~dp0cd-roms\10\OFFICE\

echo %date% %time:~-11,8%
rem Сохраняем в рар Home&Office для последующего обновления сборки
del "%~dp0imageVB\10x64Office.rar"
"C:\program files\winrar\rar.exe" a "%~dp0imageVB\10x64Officewim.rar" "%~dp0vb\10x64"

rem Переносим cd с апдэйтами в рабочую папку
move %~dp0cd-roms\10\UPD\Windows10.iso %~dp0cd-roms\

rem Закрываем окно менеджера VB чтобы не сбились настройки сохраненных виртуальных машин
TASKKILL /IM VirtualBox.exe

echo %date% %time:~-11,8%
rem запускаем Home_Office, обновляем, сиспрепим
"c:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe" -s 10x64 -v on

rem Переносим cd с апдэйтами в хранилище
move %~dp0cd-roms\Windows10.iso %~dp0cd-roms\10\UPD\

rem Переназначаем букву дискам, что бы нужному была присвоена буква G:
ReMount F: W:
ReMount G: Y:

rem Присоединяем виртуальный диск
vmount attach %~dp0vb\10x64\10x64.vhd

rem Создаем папку для будущего wim файла, с настроенной Home_Office
md %~dp0OS\64\Home_Office\

echo %date% %time:~-11,8%
rem Заливаем в wim настроенную Home_Office
Dism /Capture-Image /ImageFile:%~dp0OS\64\Home_Office\install.wim /CaptureDir:G:\ /Name:"Windows 10 Home_Office x64" /Description:"Windows 10 Home_Office x64"

rem Отсоединяем виртуальный диск
vmount detach %~dp0vb\10x64\10x64.vhd

rem создаем папку для монтирования (на всякий случай)
md %~dp0mount

echo %date% %time:~-11,8%
rem Запускаем повышение редакции до Pro_Office
DISM /Export-Image /SourceImageFile:%~dp0OS\64\Home_Office\install.wim /SourceIndex:1 /DestinationImageFile:%~dp0OS\64\Home_Office\install.wim /DestinationName:"Windows 10 Pro_Office x64"
DISM /Mount-Image /ImageFile:%~dp0OS\64\Home_Office\install.wim /Index:2 /MountDir:%~dp0mount
DISM /Image:%~dp0mount /Set-Edition:Professional
Dism /Unmount-Wim /MountDir:%~dp0mount /Commit

echo %date% %time:~-11,8%
rem Добавляем 3,4 редакции без Office
Dism /Export-Image /DestinationName:"Windows 10 Home x64" /SourceImageFile:"d:\ForCreate\OS\64\Home\install.wim" /SourceIndex:1 /DestinationImageFile:"d:\ForCreate\OS\64\Home_Office\install.wim"

Dism /Export-Image /DestinationName:"Windows 10 Pro x64" /SourceImageFile:"d:\ForCreate\OS\64\Home\install.wim" /SourceIndex:2 /DestinationImageFile:"d:\ForCreate\OS\64\Home_Office\install.wim"

alpap 05-11-2019 21:05 2894912

ну вот смотрите. я начну а вы продолжайте
например:
Цитата:

Цитата Shulzzz
rd /s /q ...»

в лог запись будет только при ошибке
Цитата:

Цитата Shulzzz
md ...»

никакого отображения не будет

можно к примеру каждую команду дублировать:
Код:

>>log.txt rd /s /q ...
rd /s /q ...
>>log.txt md ...
md ...

но для полноценности действий придется делать проверку:
Код:

if not exist Folder echo Действительна удалена
if exist %~dp0OS\64\Orig\... echo Действительно создана

тут уж хозяин-барин что надо в логе (до какой степени) или как должно выглядеть.

Shulzzz 05-11-2019 21:54 2894915

alpap, Благодарю за быстрое реагирование, хотелось бы что бы выглядело как на экране в окне cmd, там же все отображается как надо, почему нельзя сделать такой же лог, ну или не лог, а просто запись cmd экрана в текстовый файл, меня бы вполне устроило

Iska 05-11-2019 22:38 2894919

Цитата:

Цитата Shulzzz
хотелось бы что бы выглядело как на экране в окне cmd, там же все отображается как надо, »

Shulzzz, так Вам коллега alpap и пишет, что для приведённых им в примере команд на экране ничего не будет при их корректном исполнении.

Цитата:

Цитата Shulzzz
почему нельзя сделать такой же лог, ну или не лог, а просто запись cmd экрана в текстовый файл, меня бы вполне устроило »

Потому что нет такого понятия, как «запись cmd экрана».

Вы можете использовать tee.exe из комплекта GnuWin32 (например, отсюда: CoreUtils for Windows). Кроме того, говорят, что аналог tee.exe с какого-то момента включён в комплект Windows 10 (не знаю, не проверял).
Цитата:

Код:

C:\Program Files (x86)\GnuWin32\bin>tee.exe --help
Использование: C:\Program Files (x86)\GnuWin32\bin\tee.exe [КЛЮЧ]... [ФАЙЛ]...
Копирует стандартный ввод в каждый ФАЙЛ, а также в стандартный вывод.

  -a, --append              дописать в заданные ФАЙЛЫ
  -i, --ignore-interrupts  игнорировать сигналы прерывания
      --help    показать эту справку и выйти
      --version  показать информацию о версии и выйти


If a FILE is -, copy again to standard output.

Об ошибках сообщайте по адресу <bug-coreutils@gnu.org>.


То есть, Вы можете перенаправить вывод стандартного потока вывода на вход стандартного потока ввода утилиты tee.exe, которая запишет принятое содержимое в заданный файл/файлы (это и будет Ваш лог) и в свой стандартный поток вывода (это будет Ваш экран). Например:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sLog=C:\Мои проекты\0283\Log.txt
set sOutByTee="%ProgramFiles(x86)%\GnuWin32\bin\tee.exe" --append "%sLog%"

>nul copy nul "%sLog%"
>nul chcp 1251

echo Hello World|%sOutByTee%
copy "*.*" nul|%sOutByTee%
reg.exe query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"|%sOutByTee%

>nul chcp 866

endlocal
exit /b 0

Результаты исполнения



и т.п.

Busla 05-11-2019 22:52 2894922

Shulzzz, можно в PoSh сделать
Код:

Start-Transcript -Path имя_файла
запустить cmd с вашим батником, а после выполнить
Код:

Stop-Transcript
в файле будет дамп консоли

Iska 05-11-2019 23:04 2894924

Цитата:

Цитата Busla
можно в PoSh сделать »

Это как бы не лучшим вариантом из возможных оказалось, потому как и stdout перехватывает, и stderr.

Charg 06-11-2019 00:38 2894932

Iska, почему? ему же лог нужен, а не success-story.

Блин а что это за колхоз в батнике? MDT разверни и настраивай сборку. Там тебе и логи полноценные и возможностей больше.

Iska 06-11-2019 00:55 2894934

Цитата:

Цитата Charg
ему же лог нужен, »

Неа. По факту ему нужно:
Цитата:

Цитата Shulzzz
хотелось бы что бы выглядело как на экране в окне cmd, там же все отображается как надо, »


Shulzzz 06-11-2019 10:34 2894955

Charg, в чем колхоз то? МДТ этот два раза ставил, так толком и не понял в нем ничего, максимум файл ответов сделать получалось, как сам образ изменить не понял, а в дисм++ все понятно, в аудите то вообще большого ума не надо, делаю как проще, вроде получается. может и до МДТ дорасту когда нибудь.

Iska, Попробовал tee, все работает и это то что мне и нужно, спасибо Вам огромное за грамотные разъяснения!
Upd! Только с кодировкой беда, никак не приведу к общему знаменателю, где то 866, где то 1251, и не пойму как сделать чтобы везде одинаково было.


Время: 22:55.

Время: 22:55.
© OSzone.net 2001-