Содержание

Установка и удаление программ, чистка

Удалить 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

Замена Яндекс-браузера в профиле на "корпоративный"

Яндекс.Браузер для организаций

Удалить ярлыки и папки из профиля пользователя:

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

Проверка контрольных сумм

Используется Программа проверки целостности контрольной суммы (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

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 here for a reference for all command line commands. The tilde-magic codes are described under for.

https://stackoverflow.com/questions/112055/what-does-d0-mean-in-a-windows-batch-file