7 скриптов для Windows, которые помогут сэкономить время
Для исполнения следующих скриптов мы обратимся к PowerShell. Любой системный администратор (по профессии или в душе) знает его возможности и периодически пользуется, для всех остальных это просто интерфейс командной строки или иностранное слово. На популярных ресурсах вы можете найти уйму идей, как использовать PowerShell для развлечения и дела, здесь же мы рассмотрим лишь простые скрипты, которые помогут войти в курс дела.
Выключение и перезапуск
Итак, самая простая операция выключения вашего компьютера. Открываем блокнот, прописываем:
Сохраняем файл, как *.cmd (*- имя вашего файла, например shutdown.cmd) и не забудьте в типе выбрать “все файлы”. Всё, исполняемый файл по запуску выключит ваш компьютер. “-s”, в данном случае означает выключение, замените на “-r” — получите перезагрузку. “-t” — таймер, у нас он установлен на 0 секунд, но если установить на 60 — получите выключение через 60 секунд.
Удаляем ненужное
В различных сборках, предустановленных на компьютер или ноутбук, вы можете наткнуться на массу абсолютно ненужных пакетов приложений. Удалить их с помощью скрипта проще простого:
get-appxpackage -name *APPNAME* | remove-appxpackage
Как вы понимаете, *APPNAME* — название неинтересующей надстройки. Да, удалять эти пакеты можно стандартным путём или через специальные программы, но вы можете создать скрипт, который удалит их все одним двойным кликом.
Управляем процессами
Есть в PowerShell две полезные команды, которые позволят бороться с ветряными мельницами (процессами, снижающими быстродействие). Вывести их на экран можно просто прописав:
или информацию о конкретном сервисе под кодовым названием *NAME* (на этом месте должно быть название интересующего сервиса):
Но это можно сделать в диспетчере задач, а вот действительно полезным может оказаться создание файла, который по клику закрывал бы все процессы с повышенным потреблением ресурсов (браузеры, антивирусы и пр.). Для этого воспользуйтесь командой Stop-Service:
Stop-Service -Name *ANTIVIRUS*
Stop-Service -Name *BROWSER*
Названия для замены указаны в * *.
Переименовываем группу файлов
Ещё одна назойливая проблема: вы скопировали с фотоаппарата или телефона изображения. Огромная куча фотографий, которые называются однотипно вроде HGNMD034, где HGNMD — название общей директории, объединяющей файлы, например, отснятые за один день. Для того, чтобы сделать название этих файлов приятнее или иметь возможность объединить несколько папок, не получив при этом хронологическую путаницу из-за имен, можно использовать скрипт группового переименования:
$path = «$comp\desktop\journey\russia»
$filter = ‘*.jpg’
get-childitem -path $path -filter $filter |
rename-item -newname
В первой строке в кавычках укажите точный путь к файлам. Во второй строке — расширение файлов, подлежащих изменению. В последней строке вместо “HGNMD” — общее в названиях файлов, подлежащее замене, на что-то, вместо “RUSSIA” — имя, которое вы хотите присвоить. Если данный скрипт опять сохранить в качестве исполняемого файла, то подобные однотипные операции будут отнимать у вас всего несколько секунд времени.
Ищем файлы
Ещё одна простая задача, реализуемая на PowerShell — поиск файлов в директории. В данном случае рассмотрим поиск log-файлов:
Или чуть более сложный пример, когда поиск будет производиться ещё и в подпапках:
Get-ChildItem C:\Windows\* -Include *.log -Recurse -Force
Это чуть более правильная и полная запись, где “Include” — указывает на искомую часть, “Recurse” — на поиск во вложенных каталогах, “Force” — поиск включает в себя системные и скрытые файлы.
Справка
Итак, с общими принципами функционирования PowerShell мы более-менее разобрались. Если что-то непонятно — обратитесь к справочной информации следующим образом:
Это команда, которая выведет на экран все доступные команды с кратким описанием. Хотите подробнее? Нет ничего проще:
Get-Help -Name *CMDLET*
Где вместо *CMDLET* вставьте любую интересующую команду.
Находим данные
Теперь перейдём к простым скриптам, описанным чуть более сложными командами. Например, с помощью PowerShell вы можете выудить почти всю информацию о железе и комплектующих. Как вариант, вот скрипт для оценки уровня заряда аккумулятора:
Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.PowerStatus].GetConstructor(‘NonPublic, Instance’, $null, [Type[]]@(), $null ).Invoke($null)
Архитектура процессора удалённого компьютера:
[PSObject].Assembly.GetType( ‘System.Management.Automation.PsUtils’).GetMethod(‘GetProcessorArchitecture’, [Reflection.BindingFlags]40
).Invoke($null, @())
Иногда важной задачей бывает проверка прав администратора у текущего пользователя. Вот простой способ на PowerShell:
[PSObject].Assembly.GetType(‘System.Management.Automation.Utils’).GetMethod(‘IsAdministrator’, [Reflection.BindingFlags]40).Invoke($null, @())
На этом пока остановимся. Как вы наверное убедились, PowerShell не самый сложный, но очень полезный инструмент, который способен выполнять, как простейшие операции, так и достаточно сложные. Однако PowerShell не единственный инструмент для создания скриптов для Windows. Но об этом в следующий раз.
Если вы только недавно встали на путь программирования и ещё даже не пробовали поиграться с установленной операционной системой, то манипулирование с помощью скриптов может вызвать резонные вопросы необходимости и удобства. Однако, даже если опустить тот простой факт, что они помогают лучше понять, как функционирует ОС, в будущем при создании приложений, исполнение сценариев может оказаться крайне полезным навыком.
Для исполнения следующих скриптов мы обратимся к PowerShell. Любой системный администратор (по профессии или в душе) знает его возможности и периодически пользуется, для всех остальных это просто интерфейс командной строки или иностранное слово. На популярных ресурсах вы можете найти уйму идей, как использовать PowerShell для развлечения и дела, здесь же мы рассмотрим лишь простые скрипты, которые помогут войти в курс дела.
Выключение и перезапуск
Итак, самая простая операция выключения вашего компьютера. Открываем блокнот, прописываем:
Сохраняем файл, как *.cmd (*- имя вашего файла, например shutdown.cmd) и не забудьте в типе выбрать “все файлы”. Всё, исполняемый файл по запуску выключит ваш компьютер. “-s”, в данном случае означает выключение, замените на “-r” — получите перезагрузку. “-t” — таймер, у нас он установлен на 0 секунд, но если установить на 60 — получите выключение через 60 секунд.
Удаляем ненужное
В различных сборках, предустановленных на компьютер или ноутбук, вы можете наткнуться на массу абсолютно ненужных пакетов приложений. Удалить их с помощью скрипта проще простого:
get-appxpackage -name *APPNAME* | remove-appxpackage
Как вы понимаете, *APPNAME* — название неинтересующей надстройки. Да, удалять эти пакеты можно стандартным путём или через специальные программы, но вы можете создать скрипт, который удалит их все одним двойным кликом.
Управляем процессами
Есть в PowerShell две полезные команды, которые позволят бороться с ветряными мельницами (процессами, снижающими быстродействие). Вывести их на экран можно просто прописав:
или информацию о конкретном сервисе под кодовым названием *NAME* (на этом месте должно быть название интересующего сервиса):
Но это можно сделать в диспетчере задач, а вот действительно полезным может оказаться создание файла, который по клику закрывал бы все процессы с повышенным потреблением ресурсов (браузеры, антивирусы и пр.). Для этого воспользуйтесь командой Stop-Service:
Stop-Service -Name *ANTIVIRUS*
Stop-Service -Name *BROWSER*
Названия для замены указаны в * *.
Переименовываем группу файлов
Ещё одна назойливая проблема: вы скопировали с фотоаппарата или телефона изображения. Огромная куча фотографий, которые называются однотипно вроде HGNMD034, где HGNMD — название общей директории, объединяющей файлы, например, отснятые за один день. Для того, чтобы сделать название этих файлов приятнее или иметь возможность объединить несколько папок, не получив при этом хронологическую путаницу из-за имен, можно использовать скрипт группового переименования:
$path = «$comp\desktop\journey\russia»
$filter = ‘*.jpg’
get-childitem -path $path -filter $filter |
rename-item -newname
В первой строке в кавычках укажите точный путь к файлам. Во второй строке — расширение файлов, подлежащих изменению. В последней строке вместо “HGNMD” — общее в названиях файлов, подлежащее замене, на что-то, вместо “RUSSIA” — имя, которое вы хотите присвоить. Если данный скрипт опять сохранить в качестве исполняемого файла, то подобные однотипные операции будут отнимать у вас всего несколько секунд времени.
Ищем файлы
Ещё одна простая задача, реализуемая на PowerShell — поиск файлов в директории. В данном случае рассмотрим поиск log-файлов:
Или чуть более сложный пример, когда поиск будет производиться ещё и в подпапках:
Get-ChildItem C:\Windows\* -Include *.log -Recurse -Force
Это чуть более правильная и полная запись, где “Include” — указывает на искомую часть, “Recurse” — на поиск во вложенных каталогах, “Force” — поиск включает в себя системные и скрытые файлы.
Справка
Итак, с общими принципами функционирования PowerShell мы более-менее разобрались. Если что-то непонятно — обратитесь к справочной информации следующим образом:
Это команда, которая выведет на экран все доступные команды с кратким описанием. Хотите подробнее? Нет ничего проще:
Get-Help -Name *CMDLET*
Где вместо *CMDLET* вставьте любую интересующую команду.
Находим данные
Теперь перейдём к простым скриптам, описанным чуть более сложными командами. Например, с помощью PowerShell вы можете выудить почти всю информацию о железе и комплектующих. Как вариант, вот скрипт для оценки уровня заряда аккумулятора:
Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.PowerStatus].GetConstructor(‘NonPublic, Instance’, $null, [Type[]]@(), $null ).Invoke($null)
Архитектура процессора удалённого компьютера:
[PSObject].Assembly.GetType( ‘System.Management.Automation.PsUtils’).GetMethod(‘GetProcessorArchitecture’, [Reflection.BindingFlags]40
).Invoke($null, @())
Иногда важной задачей бывает проверка прав администратора у текущего пользователя. Вот простой способ на PowerShell:
[PSObject].Assembly.GetType(‘System.Management.Automation.Utils’).GetMethod(‘IsAdministrator’, [Reflection.BindingFlags]40).Invoke($null, @())
На этом пока остановимся. Как вы наверное убедились, PowerShell не самый сложный, но очень полезный инструмент, который способен выполнять, как простейшие операции, так и достаточно сложные. Однако PowerShell не единственный инструмент для создания скриптов для Windows. Но об этом в следующий раз.
Основные возможности командной строки (CMD) Windows
В этой статье описаны основные возможности командной оболочки Windows. Это полезно знать и использовать для написания скриптов.
Основы
Описание
CMD — это командная оболочка операционных систем Windows. Она работает в двух режимах: интерактивном (используется взаимодействие с пользователем) и пакетном (для написания сценариев и программ).
- содержится во всех ОС Windows по умолчанию, поэтому никакого дополнительного ПО не требуется устанавливать для ее использования
- написан пакетный файл в 90% случаев заработает на любой ОС Windows
- есть системные скрипты используемых операционная система в своей работе и зная основы CMD вы сможете легко их понимать и редактировать под свои нужды
- научившись использовать командную оболочку для написания скриптов вы сможете с таким же успехом использовать ее в интерактивном режиме, для работы и обслуживания ОС Windows
- удобно писать небольшие сценарии и программы для обслуживания операционной системы
- в интернете материалов и примеров использования этой оболочки достаточно для того, чтобы изучить основы работы и тонкости использования этого программного обеспечения
- возможности CMD довольно ограничены и написать серьезный проект будет трудно
Запуск
Для запуска командной оболочки нужно открыть Пуск\Все программы\Стандартные\Командная строка или нажать Пуск и в поиске ввести команду cmd . После запуска откроется окно командной строки.
Помощь
Для помощи существует команда help . Набрав ее вы получите список команд и их краткое описание. Для детального описания команды интересующей вас нужно ввести help , или /?
Утилита echo и вывод команд
Утилита echo выводит сообщение на экран и переключает режим отображения команд на экране. Результатом команды
будет вывод на экран
Для вставки пустой строки используется команда
Режим отображения команд на экране.
При включении данного режима на экран выводятся не только результаты команд но и сами команды. При написаны скриптов этот режим используется для их отладки. команда
без параметров показывает статус режима вывода команд на экран (включен или выключен).
По умолчанию режим вывода команд на экран включен. Для того чтобы его выключить введите следующую команду
Для включения режима вывода команд на экран введите
Этот режим можно включать и выключать как для целого скрипта так и его частей, вставляя эти команды в соответствующие места кода.
Для включения этого режима для одной команды перед ней нужно вставить символ @.
Для того, чтобы в скрипте выключить режим отображения команд на экран поместите следующую команду на начало сценария
Операторы командной строки
Результаты выполнения команды можно передать другой команде, или записать в файл. Рассмотрим операторы командной строки.
команда1 | команда2 — результат получен после выполнения команды1 служить входным параметром для команди2, удобно использовать для передачи данных между командами
Операторы перенаправления результатов выполнения > >> :
[путь] имя файла — команда принимает содержимое файла как входной параметр
[путь] имя файла — результат выполнения команды будет записано в файл, если файл не существует он будет создан, если файл существует он будет перезаписан
> [путь] имя файла — результат выполнения команды будет записано в файл, если файл не существует он будет создан, если файл существует результат допишеться в конец файла
[путь] имя файла> [путь] имя файла — данные с первого файла передадутся команде как параметр, а результат выполнения команды будет записан во второй файл
команда1 & команда2 — последовательное выполнение команд, сначала выполнится команда1, а затем команда2
команда1 && команда2 — команда2 исполнится только в случае успешного выполнения команды1
команда1 || команда2 — команда2 исполнится только в случае, если команда1 завершилась с ошибкой
(команда1 & команда2) && команда3 — группировка команд, команда3 исполнится только в случае, если команда1 и команда2 выполнятся успешно
Математические выражения.
+ — добавление
— — вычитание
/ — деления
* — умножение
% — модуль
+= — увеличение и присвоения на соответствующее число
-= — уменьшение и присвоения на соответствующее число
*= — умножение и присвоения на соответствующее число
/= — деление и присвоение на соответствующее число
== — равно
EQL — ровное
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — более
GEQ — больше, или равно
Побитовые операторы (работа с двоичными данными).
Комментарии
Для того чтобы оставить комментарий в коде сценария используется команда rem
Работа с переменными
Описание работы с переменными в командной строке.
Команда set
За работу со сменными отвечает команда set .
Для просмотра всех созданных переменных нужно ввести команду set без параметров.
Для просмотра значения конкретной переменной нужно ввести команду
Для просмотра всех переменных которые начинаются test (например переменные test1, test2 и т.д.) нужно ввести команду
Версия Windows и архитектура системы
ver — команда выводит версию операционной системы.
Версія ОСОС 1.04Windows 1.02.11Windows 2.03Windows 3.04.0.950Windows 954.00.1111Windows 95 OSR24.00.1381Windows NT 4.04.10.1998Windows 984.10.2222Windows 98 SE4.90.3000Windows ME5.00.2195Windows 20005.1.2600Windows XP5.2.3790Windows XP Professional x64 EditionWindows Home ServerWindows Server 2003 5.2.3790.1180Windows Server 2003, Service Pack 15.2.3790.12186.0.6000.16386 Windows Vista, RTM (Release to Manufacturing)6.0.6000Windows VistaWindows Server 20086.0.6001Windows Vista SP1Windows Server 2008 SP16.0.6002Windows Vista SP2Windows Server 2008 SP26.1.7600.16385Windows 7, RTM (Release to Manufacturing)Windows Server 2008 R2, RTM (Release to Manufacturing)6.1.7600Windows 7Windows Server 2008 R26.1.7601Windows 7 SP1Windows Server 2008 R2 SP16.2.9200.16384Windows 8, RTM (Release to Manufacturing)6.2.9200Windows 8Windows Server 20126.3.9600Windows 8.1Windows Server 2012 R2
Для определения архитектуры компьютера существует переменная PROCESSOR_ARCHITECTURE , для ее вывода введите команду
x86 — 32-битная версия Windows
AMD64 — 64-битная версия Windows
Примеры
Копирование новых файлов из одной папки в другую
Задача следующая. Есть локальная папка в которую Медок делает резервные копии баз данных раз в определенный период (через планировщик Медка настроено в пн-пт в обед 13:10), из этой папки нужно копировать новые файлы в сетевую папку на случай выхода из строя локального компьютера » колонки для компьютера. Основное условие, это копирование только новых файлов, которые появились в локальной папке с бэкапа.
Для этой задачи есть команда replace которую нужно использовать с ключом /A .
Вот пример скрипта который копирует новые файлы из локальной папки в сетевую
123456789101112131415161718192021222324252627@echo offrem Путь к локальной папкеset localbackupdir=pathtolocaldirrem Путь к сетевой папкеset remotebackupdir=pathtoremotedir�ь к робочей папкеset workdir=pathtoworkdirrem Путь к папке с логамиset logdir=pathtologdirrem Название лога который содержит дату созданияset logname=log-%date:
3,2%.txt rem Запуск проверокrem Проверка существует ли папка с локальними бекапамиif exist «%localbackupdir%» (echo verification 1 is complited > «%logdir%\%logname%») else (mkdir «%localbackupdir%»)rem Проверка существует ли папка для логовif exist «%logdir%» (echo verification 2 is complited >> «%logdir%\%logname%») else (mkdir «%logdir%»)rem Проверка существует ли сетевая папкаif exist «%remotebackupdir%» (echo verification 3 is complited >> «%logdir%\%logname%») else (echo error 10: remote backup directory «%remotebackupdir%» is not exist >> «%logdir%\%logname%» & exit 10) rem Запуск копированияcd /d «%workdir%» || (echo error 11: problem is workdir «%workdir%» >> «%logdir%\%logname%» & exit 11)replace «%localbackupdir%\*» «%remotebackupdir%» /A >> «%logdir%\%logname%»if errorlevel 1 (echo error 13: replays is over whith error %errorlevel% >> «%logdir%\%logname%» & exit 13) echo replays is complited >> «%logdir%\%logname%»exit 0