===== Установка и удаление программ, чистка ===== ==== Удалить Dameware client ==== Net Stop DWMRCS Net Stop DNTUS26 C:\Windows\dwrcs\DNTUS26.EXE -remove C:\Windows\dwrcs\DWRCS.EXE -remove ==== Удалить менеджер браузеров Яндекса ==== FIXME msiexec /X {42C06229-B704-4375-BF63-3E22FEAC736C} /quiet /norestart ==== Замена Яндекс-браузера в профиле на "корпоративный" ==== [[https://browser.yandex.ru/corp/|Яндекс.Браузер для организаций]] Удалить ярлыки и папки из профиля пользователя: rem Windows 7 и выше del "%appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Yandex*" /q /f del "%userprofile%\Desktop\Yandex*" /q /f rmdir "%localappdata%\Yandex\YandexBrowser\Application" /s /q rmdir "%localappdata%\Yandex\YandexBrowser\Updates" /s /q rmdir "%localappdata%\Yandex\YaPin" /s /q rmdir "%appdata%\Microsoft\Windows\Start Menu\Programs\Yandex" /s /q # Перестроить кэш значков ie4uinit.exe -ClearIconCache rem Windows XP del "%userprofile%\Application Data\Microsoft\Internet Explorer\Quick Launch\Yandex*" /q /f del "%userprofile%\Рабочий стол\Yandex*" /q /f rmdir "%userprofile%\Local Settings\Application Data\Yandex\YandexBrowser\Application" /s /q rmdir "%userprofile%\Local Settings\Application Data\Yandex\Updater" /s /q rmdir "%userprofile%\Local Settings\Application Data\Yandex\YaPin" /s /q rmdir "%userprofile%\Главное меню\Программы\Yandex" /s /q Если нужно удалить "корпоративный" Яндекс.Браузер: wmic product where name="Yandex" call uninstall /nointeractive rem грохнуть сервис апдейтов - он остаётся после деинсталляции sc delete YandexBrowserService ==== Почистить временные папки в Windows 7 на удалённой машине ==== @echo off set /P COMP=Введите имя компьютера: set /P USER=Введите имя папки профиля пользователя: del "\\%COMP%\c$\users\%USER%\appdata\local\temp\*" /f /s /q del "\\%COMP%\c$\Users\%USER%\AppData\Local\Microsoft\Windows\Temporary Internet Files" /f /s /q dir "\\%COMP%\c$\Users\%USER%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" pause ==== Почистить временные папки в Windows XP на удалённой машине ==== @echo off set /P COMP=Введите имя компьютера: set /P USER=Введите имя папки профиля пользователя: del "\\%COMP%\c$\Documents and settings\%USER%\Local Settings\Temp\*" /f /s /q /a del "\\%COMP%\c$\Documents and settings\%USER%\Local Settings\Temporary Internet Files" /f /s /q /a dir "\\%COMP%\c$\Documents and settings\%USER%\Главное меню\Программы\Автозагрузка" pause ===== WMIC ===== ==== Выгрузить список программ на удалённой машине ==== @echo off set /P COMP=Введите имя компьютера: rem Не помню, зачем это было нужно rem set DATESTAMP=%DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2% rem set TIMESTAMP=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2% rem set DATEANDTIME=%DATESTAMP%_%TIMESTAMP% wmic /node:"%COMP%" product list > %COMP%_programs_list.txt rem Более детализированный список rem wmic /node:"%COMP%" product list full > %COMP%_programs_list_full.txt ==== Удалить программу через WMIC ==== @echo off title Деинсталляция программ set /P COMP=Введите имя компьютера: rem По ID set /P PROG=Введите ID программы: wmic /node:%COMP% product where IdentifyingNumber="%PROG%" call uninstall /nointeractive rem По вендору wmic /node:%COMP% product where vendor="DocsVision" call uninstall /nointeractive rem По имени программы set /P PROG=Введите точное название программы (например, Adobe Acrobat 7.0 Professional): wmic /node:"%COMP%" product where name="%PROG%" call uninstall /nointeractive pause ===== Прочее ===== ==== Узнать ОС и её разрядность на компьютере в домене ==== @echo off cls set /P COMP=Введите имя компьютера: wmic /node:"%COMP%" os get Caption,OSArchitecture pause ==== Вывести температуру процессора ==== Запускать с повышенными привилегиями @echo off for /f "skip=1 tokens=2 delims==" %%A in ('wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature /value') do set /a "HunDegCel=(%%~A*10)-27315" echo %HunDegCel:~0,-2%.%HunDegCel:~-2% Degrees Celsius pause ==== Список процессов на удалённом компе ==== @echo off set /P COMP=Введите имя компьютера: tasklist /S %COMP% pause ==== Прибить удалённый процесс ==== @echo off set /P COMP=Введите имя компьютера: set /P PROC=Введите имя процесса, который нужно завершить: taskkill /S %COMP% /F /IM %PROC% /T ==== Вызвать синий экран на удалённой машине ==== @echo off title BSOD set /P COMP=Введите имя компьютера: wmic /node:"%COMP%" process where name="csrss.exe" delete /nointeractive ==== Узнать версию IE ==== reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer" /v svcVersion ===== Файловые операции ===== ==== Синхронизация определённой папки со множества компьютеров домена в одну папку на сервере ==== Архитектура решения определялась тем, что некоторые клиентские машины сидят в защищённой сети, что делает невозможным сбор логов с сервера, поэтому нужно сделать задачу на клиентских машинах. === Реализация === Сделана политика "Сбор логов" и одноимённая группа, куда добавлены пользователи и компьютеры, на которых установлена программа Some Platform. В политике создано задание для планировщика, привязанное к пользователю и запускающее программу nircmd.exe в папке NETLOGON, которая, в свою очередь, в невидимом режиме запускает скрипт, где robocopy сливает папку с логами на сервер, называя её в соответствии с логином пользователя. Для того, чтобы этот велосипед работал, должна быть включена политика Loopback Detection в режиме Merge (в русской винде "Конфигурация компьютера/Шаблоны администрирования/Система/Групповая политика/Настройка режима обработки замыкания пользовательской групповой политики", режим слияния). Также, в задаче сделана проверка наличия папки Some Platform (нацеливание на элемент в свойствах задачи); если её нет, значит, задача работать не будет. Строка запуска скрипта: \\domain.ru\netlogon\nircmd.exe exec hide \\domain.ru\netlogon\someplatform-logs-sync.cmd Сам скрипт (ключи после /MIR, полагаю, не нужны, но не стал убирать): SET destination ="\\server\users-logs" robocopy "%userprofile%\Some Platform\SP7Client\logs" "%destination%\%username%" /MIR /ns /nc /nfl /ndl /np /njh /njs Вариант на Powershell, брошен в связи с тем, что скрыть выполнение скриптов от пользователя без привлечения дополнительных программ всё равно не вышло: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -file "\\domain.ru\netlogon\someplatform-logs-sync.ps1" $destination = "\\server\users-logs" New-Item -Path $destination\$env:username -type directory robocopy "$env:userprofile\Some Platform\SP7Client\logs" "$destination\$env:username" /MIR /ns /nc /nfl /ndl /np /njh /njs ==== Полная резервная копия одной папки в другую с меткой времени ==== SET source=%userprofile%\sourcefolder SET destination=%userprofile%\destinationfolder REM Выведет ГГГГ-ММ-ДД_чч-мм-сс SET mark=%date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%-%time:~3,2%-%time:~6,2% SET backupfolder=%destination%\backup_%mark% robocopy %source% %backupfolder% /MIR ==== Синхронизация папок с сетевого хранилища на USB-диск + ведение лога ==== $letter = E: $address = "192.168.1.5" $mark = get-date -UFormat "%Y-%m-%d_%H-%M-%S" ROBOCOPY \\$address\Distr $letter\Distr /MIR /XO /TEE /NP /LOG:sync_syn2usb_$mark.txt ROBOCOPY \\$address\Doc $letter\Doc /MIR /XO /TEE /NP /LOG+:sync_syn2usb_$mark.txt ROBOCOPY \\$address\English $letter\English /MIR /XO /TEE /NP /LOG+:sync_syn2usb_$mark.txt ROBOCOPY \\$address\music $letter\music /MIR /XO /TEE /NP /LOG+:sync_syn2usb_$mark.txt ROBOCOPY \\$address\photo $letter\photo /MIR /XO /TEE /NP /LOG+:sync_syn2usb_$mark.txt # Без папки xynoreport ROBOCOPY \\$address\Upload $letter\Upload /XD synoreport /MIR /XO /TEE /NP /LOG+:sync_syn2usb_$mark.txt ROBOCOPY \\$address\video $letter\video /MIR /XO /TEE /NP /LOG+:sync_syn2usb_$mark.txt ==== Проверка контрольных сумм ==== Используется [[https://support.microsoft.com/ru-ru/help/841290/availability-and-description-of-the-file-checksum-integrity-verifier-u|Программа проверки целостности контрольной суммы]] (FCIV). rem Сгенерировать fciv.exe -add G:\demofiles -wp -sha1 -xml G:\hashdb.xml rem Проверить fciv.exe -v -sha1 -xml G:\hashdb.xml rem Compute hashes: fciv.exe c:\mydir\myfile.dll fciv.exe c:\ -r -exc exceptions.txt -sha1 -xml dbsha.xml fciv.exe c:\mydir -type *.exe fciv.exe c:\mydir -wp -both -xml db.xml rem List hashes stored in database: fciv.exe -list -sha1 -xml db.xml rem Verifications: fciv.exe -v -sha1 -xml db.xml fciv.exe -v -bp c:\mydir -sha1 -xml db.xml [[https://www.bobpusateri.com/archive/2013/02/verifying-file-copymove-operations-with-microsoft-file-checksum-integrity-verifier/|Verifying File Copy/Move Operations With Microsoft File Checksum Integrity Verifier]] Powershell: $usb = "E:\" $nas = "\\192.168.1.3" $mark = get-date -UFormat "%Y-%m-%d %H-%M-%S" Get-ChildItem $usb -Recurse | get-filehash -Algorithm md5 | Export-Csv -NoTypeInformation -Delimiter ';' -Encoding UTF8 "$env:userprofile\Desktop\$mark-usb.csv" Get-ChildItem $nas -Recurse | get-filehash -Algorithm md5 | Export-Csv -NoTypeInformation -Delimiter ';' -Encoding UTF8 "$env:userprofile\Desktop\$mark-nas.csv" $usbrep = Import-Csv "$env:userprofile\Desktop\$mark-usb.csv" -Delimiter ';' $nasrep = Import-Csv "$env:userprofile\Desktop\$mark-nas.csv" -Delimiter ';' Compare-Object -ReferenceObject $usbrep -DifferenceObject $nasrep -Property Hash # Если на экране будут какие-то хэши, значит, есть различия. pause Подсчёт контрольных сумм долгий процесс, так что можно заменить проверку на размеры файлов, что гораздо быстрее. $usb = "E:\" $nas = "\\192.168.1.3" $mark = get-date -UFormat "%Y-%m-%d %H-%M-%S" Get-ChildItem $usb -Recurse -File | select Directory,BaseName,Extension,Length,CreationTime,LastAccessTime,LastWriteTime,Attributes,IsReadOnly | Export-Csv -NoTypeInformation -Delimiter ';' -Encoding UTF8 "$env:userprofile\Desktop\$mark-usb.csv" Get-ChildItem $nas -Recurse -File | select Directory,BaseName,Extension,Length,CreationTime,LastAccessTime,LastWriteTime,Attributes,IsReadOnly | Export-Csv -NoTypeInformation -Delimiter ';' -Encoding UTF8 "$env:userprofile\Desktop\$mark-nas.csv" $usbrep = Import-Csv "$env:userprofile\Desktop\$mark-usb.csv" -Delimiter ';' $nasrep = Import-Csv "$env:userprofile\Desktop\$mark-nas.csv" -Delimiter ';' Compare-Object -ReferenceObject $usbrep -DifferenceObject $nasrep -Property Length | fl # Если на экране будут какие-то значения, значит, есть различия. pause ===== Учётные записи ===== ==== Создать пользователя и поместить его в группу администраторов ==== net user userok P@ssw0rd! /add net localgroup Администраторы userok /add net localgroup Administrators userok /add ===== Справка ===== ==== Переменные (FOR substitution modifiers) ==== The magic variables %n contains the arguments used to invoke the file: %0 is the path to the bat-file itself, %1 is the first argument after, %2 is the second and so on. Since the arguments are often file paths, there is some additional syntax to extract parts of the path. ~d is drive, ~p is the path (without drive), ~n is the file name. They can be combined so ~dp is drive+path. %~dp0 is therefore pretty useful in a bat: it is the folder in which the executing bat file resides. You can also get other kinds of meta info about the file: ~t is the timestamp, ~z is the size. Look [[http://technet.microsoft.com/en-us/library/bb490890.aspx|here]] for a reference for all command line commands. The tilde-magic codes are described under [[http://technet.microsoft.com/en-us/library/bb490909.aspx|for]]. https://stackoverflow.com/questions/112055/what-does-d0-mean-in-a-windows-batch-file