С этой статьей вы не научитесь программировать и даже не напишите как таковую программу, но найдете здесь отличные VBS скрипты и BAT файлы, которые без проблем напишете в обычном блокноте Windows, сможете усовершенствовать по своему, потом похвастаться перед друзьями и близкими. Возможно это поднимет вам настроение и вы отлично проведете время.
Большинство похожих скриптов пишутся для удобства и автоматизации каких-либо действий на компьютере с ОС Windows. Представленные же ниже скрипты мало окажутся полезными (может мне так кажется), но они отлично подойдут для первоначального знакомства с «кодингом». Вы отлично проведете время, удивив как себя, так и знакомых чайников (не программистов), плюс это еще один хороший вариант убить время за компьютером.
Немного терминологии:
- VBS — язык программирования для создания скриптов в ОС Windows, создается/редактируется в Блокноте Windows, имеет разрешение «.vbs». Думаю, продолжать не имеет смысла, ибо это мало о чем скажет, особенно новичкам. Интересующимся — статья в Википедии.
- BAT — пакетный файл, в народе просто «батник». Расширение файла «.bat». Дальше аналогично — статья в Википедии.
Данных расширений (vbs, bat) файлы создаются во всеми известном Блокноте Windows (Notepad). Для большего удобства создания скриптов рекомендуется использовать усовершенствованный (скажем так) блокнот — Notepad++. Он удобен подсветкой синтаксиса большого количества языков программирования, если вам это мало о чем говорит, то скачайте и пишите в нем — ошибок сделаете меньше в коде, ну или будет их проще найти, чем в том же мало функциональном Блокноте Windows.
Скачать Notepad++ можно на официальном сайте.
Для наглядности пример (слева — Блокнот Windows, справа — Notepad++):
Приступим
Если вы уже знакомы с VBS скриптами и батниками, то скорее всего нижеследующие примеры вам будут неинтересны, если же вы новичок, то для первоначального ознакомления — то, что нужно.
Научим компьютер здороваться
- Открываем Блокнот (или Notepad Plus Plus).
- Копируем в вставляем код:
Set sapi=CreateObject(«sapi.spvoice»)
sapi.Speak «Hello!» - Обязательное условие: кавычки должны быть “такими”, «ёлочки» не подойдут, скрипт не будет обрабатываться и выйдет ошибка. Вместо слова «Hello» можете написать что угодно, даже по русски, при наличии русского голосового движка.
- Дальше выбираем Файл — Сохранить как — Тип файла — Все файлы — название.vbs
- Называйте файл как хотите, но не забудьте в конце прописать расширение — .vbs (пример — Privet.vbs).
- Теперь пробуйте проверить свой скрипт — запустите файл двойным щелчок мыши.
Один нюанс: если вы прописали в кавычках слова русскими буквами, а при запуске произносится непонятно что, то у вас просто не установлен русский голосовой движок. Подробная установка и настройка голосового движка выходит за рамки нашей статьи, поэтому более подробно ознакомьтесь здесь и вновь возвращайтесь сюда.
Теперь, сделаем следующее: пропишем данный скрипт в автозагрузку, а это означает то, что при запуске компьютера вам будет произнесено написанное в программе слово (слова), если как в примере, то будет говорить — «Hello» при каждом включении компьютера. Как это сделать?
Все просто, программу (скрипт) добавить в автозагрузку можно таким же образом, то есть через такой же VBS скрипт. Создаем файл в блокноте, копируем/вставляем (Ctrl+C/Ctrl+V) следующий код:
Dim vOrg, objArgs, root, key, WshShell
root = «HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun»
KeyHP = «Program»
Set WshShell = WScript.CreateObject(«WScript.Shell»)
WshShell.RegWrite root+keyHP,»C:Privet.vbs /autorun»
Изменяем путь до скрипта «говорилки», вот эту строчку — C:Privet.vbs на свою. Прописываем где у вас лежит этот скрипт и как называется. Дальше сохраняем только что созданную мини программу в блокноте и запускаем. Все, теперь компьютер будет с вами здороваться пр каждом включении.
Открыть дисковод
- Открыть блокнот. Скопировать/Вставить следующий код:
Set a = CreateObject(«WMPlayer.OCX.7»)
Set b = a.CdromCollection
Set c = b.Item(0)
Set d = c.Eject
- Сохранить с расширением .vbs
- Запустить скрипт и откроется дисковод.
Есть более интересная модификация данного скрипта:
Set WMPlayer = CreateObject(«WMPlayer.OCX.7»)
do
WMPlayer.CdRomCollection.Item(0).Eject()
loop
В данном случае будет все время открываться-закрываться CD/DVD-привод, на ноутбуках в этом случае будет открываться после каждого его закрытия.
Внимание! Второй код (открытие-закрытие дисковода), некоторые антивирусы видят как вредоносную программу. Антивирус Касперского (в т.ч. и Kaspersky Free) его видит именно так и уничтожает сразу же. В первом же случае (просто открытие дисковода) для антивирусных программ не является вредоносным скриптом.
Чтобы прекратить автоматически открывать-закрывать дисковод необходимо:
- Запустить диспетчер задач (комбинация клавиш Windows — Ctrl+Alt+Del).
- Перейти на вкладку «Процессы».
- Найти процесс wscript.exe — правая кнопка мыши — завершить процесс.
Игра
Интересная находка из Сети — игра на VBS. Необходимо угадать число от 0 до 100. Скрипт автоматически при запуске задает (разгадывает) число, которое вам необходимо угадать и ввести в специальном окошке, при неправильном ответе даются подсказки, например меньше или больше.
Ниже тот самый код который необходимо скопировать и вставить в блокнот, далее сохранить (расширение .vbs).
Вы также можете изменять сообщения по своему, все что написано кириллицей без проблем редактируется. Не бойтесь сломать код. Поэкспериментируйте. В случае чего заново скопируйте рабочий код отсюда.
Set y = CreateObject(«Scripting.FileSystemObject»)
Set y = Nothing
Do
a = 0
u = 0
Randomize
Number = Int((RND*99)+1)
MsgBox «Я загадал число от 1 до 100, попробуй отгадать»,64,»Угадайка»
Do
a = a + 1
c = InputBox(«Угадай число» & vbCrLf & vbCrLf & «Попытка: » & a & vbCrLf & vbCrLf & «Чтобы посмотреть результаты введите число !» & vbCrLf & vbCrLf & «Для выхода оставьте поле пустым» & vbCrLf & vbCrLf,»Угадайка»)
If c = «!» Then CreateObject(«WScript.Shell»).Run «notepad C:WindowsResult.dll»,3,True : Exit Do
If c <> «» Then
If IsNumeric(c) = True Then
If CInt(c) < Number Then MsgBox «Нет,это не » & c & «. Я загадал число больше»,64,»Угадайка»
If CInt(c) > Number Then MsgBox «Нет,это не » & c & «. Я загадал число меньше»,64,»Угадайка»
If CInt(c) = Number Then
Set y = CreateObject(«Scripting.FileSystemObject»)
MsgBox («Количество попыток: » & a)
If MsgBox («Правильно, это было число » & c & «. Начать заного?»,36,»Угадайка») = 6 Then Exit Do Else WScript.Quit
End If
Else
MsgBox «Это не число!»,16,»Угадайка»
a = a — 1
End If
Else
a = a — 1
l = MsgBox («Ты ничего не ввел. Выйти из программы?»,36,»Угадайка»)
If l = 6 Then WScript.Quit
End If
Loop
loop
Ну и перед тем как переходить к батникам (.BAT) воспользуемся самым полезным VBS скриптом из всех перечисленных в этой статье.
Скрипт закрывающий wscript.exe
Сам скрипт:
Set TaskKill = CreateObject(«WScript.Shell»)
TaskKill.Run «TaskKill /f /im wscript.exe»
По сути он делает тоже самое, что чуть выше объяснялось в диспетчере задач, как например нельзя просто взять и закрыть надоедливый скрипт открывающий-закрывающий дисковод, а запустив данный скрипт все запущенные будут закрыты. Это как клин клином вышибают.
Немного познакомились с VBS скриптами и о том как их писать в блокноте, теперь рассмотрим несколько примеров использования BAT файлов (далее — батник).
Завершение работы /Перезагрузка компьютера
Совсем простой батник состоящий всего из одной строки.
- Открываем Блокнот.
- Пишем следующий код:
shutdown -s -t 1 -c -f
- Далее Файл — Сохранить как — нзвание.bat
- Обратите внимание на расширение файла, это уже не VBS скрипт, а батник, по этому в конце названия прописываем .bat (Пример compoff.bat).
- Запускаем только что созданный батник двойным щелчком мыши и компьютер выключится (Завершение работы).
Есть такой вариант кода:
shutdown -r -t 1 -c -f
Все также, прописываем в блокноте, сохраняем с расширением .bat и после запуска компьютер перезагрузится (обычная перезагрузка компьютера).
Удаление обновлений
Данный батник пригодится в том случае, если вы уже обновились до Windows 10. В чем суть? В этом батнике перечислены команды по удалению нескольких обновлений, как видно из названия — обновления телеметрии, или как раз одна из шпионских штучек системы, мы однажды уже говорили как отключить функции слежки Windows 10, в данном же случае вы просто создаете батник, в содержимое копируете код ниже и запускаете, после чего будут удалены перечисленные обновления.
@echo
echo
echo Step 1: Delete Updates Telemetry
wusa /uninstall /kb:3068708 /quiet /norestart
wusa /uninstall /kb:3022345 /quiet /norestart
wusa /uninstall /kb:3075249 /quiet /norestart
wusa /uninstall /kb:3080149 /quiet /norestart
Таким образом можно удалить абсолютно любое обновление, даже назойливое KB971033 которое проверяет копию Windows 7 на подлинность.
В Интернете встречается много различных скриптов, якобы безвредных, но будьте осторожны, прежде чем пробовать непонятно какой скрипт, некоторые из них могут навредить, например — вносить изменения в реестр, а в случае каких ошибок система будет выдавать ошибки, в таком случае придется или восстанавливать реестр Windows или сделать восстановление системы.
Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась.
Для PowerShell можно писать сценарии на интерпретируемом мультипарадигменном языке, в котором есть элементы классического процедурного, объектно-ориентированного и даже функционального программирования: условный переход, циклы, переменные, массивы, хэш-таблицы, классы, обработка ошибок, а также функции, командлеты и конвейеры. Предыдущая статья была посвящена основам работы в среде, а сейчас мы предлагаем вниманию читателей небольшой справочник для программистов.
Оглавление:
Комментарии
Переменные и их типы
Системные переменные
Области видимости
Переменные окружения (среды)
Арифметические операторы и операторы сравнения
Операторы присваивания
Логические операторы
Условный переход
Циклы
Массивы
Хэш-таблицы
Функции
Обработка ошибок
Писать код можно в любом текстовом редакторе или с использованием интегрированной среды разработки — проще всего взять Windows PowerShell ISE из комплекта поставки серверных операционных систем Microsoft. Нужно это только для достаточно сложных скриптов: короткие наборы команд проще выполнять в интерактивном режиме.
Комментарии
Использование комментариев считается частью хорошего стиля программирования наряду с правильными отступами и пробелами:
# Для строчных комментариев используется символ решетки — содержимое строки интерпретатор не обрабатывает.
<#
Так обозначаются начало и конец блочного комментария.
Заключенный между ними текст интерпретатор игнорирует.
#>
Переменные и их типы
Переменные в PowerShell — это именованные объекты. Их названия могут включать символ подчеркивания, а также буквы и числа. Перед именем всегда используется символ $, а чтобы объявить переменную, достаточно указать интерпретатору допустимое имя:
Для инициализации переменной (присвоения ей значения) применяется оператор присваивания (символ =):
$test = 100
Объявить переменную можно с указанием ее типа в квадратных скобках (оператор приведения типов) перед именем или значением:
[int]$test = 100
$test = [int]100
Важно понимать, что переменные в PowerShell — это полноценные объекты (классы) со свойствами и методами, типы которых основаны на имеющихся в .NET Core. Перечислим основные:
PowerShell поддерживает неявное преобразование типов, кроме того тип переменной может меняться на ходу (например, при помощи оператора присваивания), если он не указан принудительно — в этом случае интерпретатор выдаст ошибку. Определить тип переменной из предыдущего примера можно при помощи вызова метода GetType():
$test.GetType().FullName
Существует некоторое количество командлетов для управления переменными. Их список в удобной форме выводится с помощью команды:
Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap
Для просмотра объявленных переменных и их значений можно использовать специальный командлет:
Get-Variable | more
Такой способ кажется чрезмерно громоздким, с переменными намного удобнее работать через операторы или обращаясь к их свойствам и методам напрямую. Тем не менее командлеты имеют право на существование, поскольку позволяют задать некоторые дополнительные параметры. Важно понимать, что пользовательские переменные определены только в рамках текущего сеанса. После закрытия консоли или завершения сценария они удаляются.
Системные переменные
Помимо объявленных пользователем существуют встроенные (системные) переменные, которые не удаляются после завершения текущего сеанса. Делятся они на два типа, при этом данные о состоянии PowerShell хранятся в автоматических переменных, которым нельзя самостоятельно присвоить произвольные значения. К их числу относится, например, $PWD:
$PWD.Path
Для хранения пользовательских настроек нужны переменные предпочтений, значения которых можно изменить. К примеру, с помощью $ErrorActionPreference задается реакция интерпретатора команд на возникновение некритических ошибок.
Вдобавок к операторам и командлетам для обращения к объявленным переменным существует псевдонакопитель Variable:. Работать с ним можно по аналогии с другими накопителями, а переменные в этом случае напоминают объекты файловой системы:
Get-ChildItem Variable: | more
или
ls Variable: | more
Области видимости
Для переменных в PowerShell существует понятие области видимости (Scope). Действие глобальной области (Global) распространяется на весь текущий сеанс — в нее входят, например, системные переменные. Локальные (Local) переменные доступны только в области, где они были определены: скажем внутри функции. Есть еще понятие области действия сценария (Script), но для команд скрипта она по сути является локальной. По умолчанию при объявлении переменных им задается локальная область действия, а чтобы это изменить, нужна специальная конструкция вида: $Global: переменная = значение.
Например, так:
$Global:test = 100
Переменные окружения (среды)
Из PowerShell доступен еще один псевдонакопитель Env:, с помощью которого можно обратиться к переменным среды. При запуске оболочки они копируются из родительского процесса (т.е. из инициировавшей текущий сеанс программы) и обычно их первоначальные значения совпадают со значениями в панели управления. Для просмотра переменных окружения используется командлет Get-ChildItem или его псевдонимы (алиасы): ls и dir.
dir Env:
Эти переменные представляют собой последовательности байтов (или символов, если угодно), интерпретация которых зависит только от использующей их программы. Командлеты *-Variable с переменными среды не работают. Чтобы обратиться к ним, придется использовать префикс диска:
$env:TEST = "Hello, World!"
Арифметические операторы и операторы сравнения
В PowerShell есть следующие арифметические операторы: + (сложение), — (вычитание), * (умножение), / (деление) и % (модуль или остаток от деления). Результат арифметического выражения вычисляется слева направо в соответствии с общепринятым порядком операций, а для группировки частей выражения применяются круглые скобки. Пробелы между операторами игнорируются, их используют только для облегчения восприятия. Оператор + также объединяет, а оператор * повторяет строки. При попытке прибавить число к строке оно будет преобразовано в строку. Кроме того, в языке PowerShell есть множество операторов сравнения, которые проверяют соответствие между двумя значениями и возвращают логические True или False:
Существуют и другие подобные операторы, позволяющие, например, сравнивать строки с учетом символа подстановки или использовать регулярные выражения для поиска соответствия образцу. Их мы подробно рассмотрим в следующих статьях. Символы <, > и = для сравнения не используются, поскольку задействованы для других целей.
Операторы присваивания
Помимо самого распространенного оператора = существуют и другие операторы присваивания: +=, -=, *=, /= и %=. Они изменяют значение перед присвоением. Аналогично ведут себя унарные операторы ++ и —, которые увеличивают или уменьшают значение переменной — они тоже относятся к операторам присваивания.
Логические операторы
Для описания сложных условий одного только сравнения недостаточно. Записать любые логические выражения можно с помощью операторов: -and, -or, -xor, -not и!.. Работают они как и в других языках программирования, при этом можно использовать круглые скобки, чтобы задать порядок вычисления:
("Тест" -eq "Тест") -and (100 -eq 100)
-not (123 -gt 321)
!(123 -gt 321)
Условный переход
Операторы ветвления в PowerShell стандартные: IF(IF…ELSE, IF…ELSEIF…ELSE) и SWITCH. Рассмотрим их использование на примерах:
[int]$test = 100
if ($test -eq 100) {
Write-Host "test = 100"
}
[int]$test = 50
if ($test -eq 100) {
Write-Host "test = 100"
}
else {
Write-Host "test <> 100"
}
[int]$test = 10
if ($test -eq 100) {
Write-Host "test = 100"
}
elseif ($test -gt 100) {
Write-Host "test > 100"
}
else {
Write-Host "test < 100"
}
[int]$test = 5
switch ($test) {
0 {Write-Host "test = 0"}
1 {Write-Host "test = 1"}
2 {Write-Host "test = 2"}
3 {Write-Host "test = 3"}
4 {Write-Host "test = 4"}
5 {Write-Host "test = 5"}
default {Write-Host "test > 5 или значение не определено"}
}
Циклы
В языке PowerShell есть несколько разновидностей циклов: WHILE, DO WHILE, DO UNTIL, FOR и FOREACH.
Цикл с предусловием работает, если/пока оно выполняется:
[int]$test = 0
while ($test -lt 10) {
Write-Host $test
$test = $test + 1
}
Циклы с постусловием отработают хотя бы один раз, потому что проверка условия производится после выполнения итерации. При этом DO WHILE работает, пока условие истинно, а DO UNTIL — пока оно ложно:
[int]$test = 0
do {
Write-Host $test
$test = $test + 1
}
while ($test -lt 10)
[int]$test = 0
do {
Write-Host $test
$test = $test + 1
}
until ($test -gt 9)
Количество итераций цикла FOR известно заранее:
for ([int]$test = 0; $test -lt 10; $test++) {
Write-Host $test
}
В цикле FOREACH осуществляет перебор элементов массива или коллекции (хэш-таблицы):
$test_collection = "item1", "item2", "item3"
foreach ($item in $test_collection)
{
Write-Host $item
}
Массивы
В переменных PowerShell хранятся не только единичные объекты (число, строка и т.д.), но и множественные. Самая простая разновидность таких переменных — массивы. Массив может состоять из нескольких элементов, из одного элемента или быть пустым, т.е. не содержать элементов. Для его объявления используется оператор @(), который понадобится нам в следующей статье — он очень важен для добавления в массив других массивов (создания многомерных массивов), передачи массивов в функции в качестве аргумента и тому подобных задач:
$test_array = @() #создаем пустой массив
При инициализации массива его значения перечисляются через запятую (специальный оператор ,):
$test_array = @(1, 2, 3, 4) # создаем массив из четырех элементов
В большинстве случаев оператор @() можно опустить:
$test_array = 1, 2, 3, 4
В этом случае массив из одного элемента инициализируется следующим образом
$test_array = , 1
Для обращения к элементам массива используется начинающийся с нуля целочисленный индекс и оператор индекса (квадратные скобки):
$test_array[0] = 1
Можно указать несколько индексов через запятую, в т.ч. повторяющихся:
$test_array = "один", "два", "три", "четыре"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0]
Оператор ..
(две точки — оператор диапазона) возвращает массив целых чисел на определенном верхней и нижней границей отрезке. Например, выражение 1..4 выводит массив из четырех элементов @(1, 2, 3, 4), а выражение 8..5 — массив @(8, 7, 6, 5).
С помощью оператора диапазона можно инициализировать массив ($test_array = 1..4) или получить срез (slice), т.е. последовательность элементов одного массива с индексами из другого. При этом отрицательное число -1 обозначает последний элемент массива, -2 — предпоследний и т.д.
$test_array = "один", "два", "три", "четыре"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]
Обратите внимание, что значения целочисленного массива могут быть больше максимального значения индекса массива с данными. В этом случае возвращаются все значения до последнего:
$test_array[0..100]
Если попытаться обратиться к единственному несуществующему элементу массива, возвращается значение $null.
В PowerShell массивы могут содержать элементы разных типов или быть строго типизированными:
$test_array = 1, 2, "тест", 3, 4
for ([int]$i = 0; $i -lt $test_array.count; $i++)
{
Write-Host $test_array[$i]
}
Где свойство $test_array.count — количество элементов массива.
Пример создания строго типизированного массива:
[int[]]$test_array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Хэш-таблицы
Еще один базовый тип переменных в языке PowerShell — хэш-таблицы, которые также называют ассоциативными массивами. Hashtable похожи на JSON object и строятся по принципу ключ-значение. В отличие от обычных массивов, доступ к их элементам осуществляется по именованным ключам, которые являются свойствами объекта (также можно использовать оператор индекса — квадратные скобки).
Пустая хэш-таблица объявляется с помощью служебного символа @ и операторных скобок:
$test_hashtable = @{}
При объявлении можно сразу создать ключи и присвоить им значения:
$test_hashtable = @{one="один"; two="два"; three="три"; "some key"="some value"}
Для добавления элемента в хэш-таблицу нужно присвоить ей еще несуществующий ключ или воспользоваться методом Add(). Если присваивание делается с существующим ключом, его значение изменится. Для удаления элемента из хэш-таблицы используется метод Remove().
$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "четыре")
$test_hashtable.five = "пять"
$test_hashtable['five'] = "заменяем значение"
$test_hashtable.Remove("one")
Переменные этого типа можно передавать в качестве аргументов функциям и командлетам — в следующей статье мы изучим как это делается, а также рассмотрим еще один сходный тип — PSCustomObject.
Функции
В языке PowerShell есть все необходимые для процедурного программирования элементы, включая функции. Для их описания используется служебное слово Function, после которого требуется указать имя функции и заключенное в операторные скобки тело. При необходимости передать в функцию аргументы их можно указать сразу после имени в круглых скобках.
function имя-функции (аргумент1, ..., аргументN)
{
тело-функции
}
Функция всегда возвращает результат — это массив результатов всех ее стейтментов, если их более одного. Если стейтмент один, возвращается единственное значение соответствующего типа. Конструкция return $value добавляет элемент со значением $value к массиву результатов и прерывает выполнение statement list, а пустая функция возвращает $null.
Для примера создадим функцию возведения числа в квадрат:
function sqr ($number)
{
return $number * $number
}
Отметим, что в теле функции можно использовать любые объявленные до ее вызова переменные, а вызов функций в PowerShell может показаться непривычным: аргументы (если они есть) не заключаются в круглые скобки и разделяются пробелами.
sqr 2
или так:
sqr -number 2
Из-за способа передачи аргументов саму функцию иногда приходится заключать в скобки:
function test_func ($n) {}
test_func -eq $null # функция не вызывалась
(test_func) -eq $null # результат выражения — $true
При описании функции можно присвоить аргументам значения по умолчанию:
function func ($arg = value) {
#тело функции
}
Существует и другой синтаксис для описания аргументов функции, кроме того параметры могут считываться из конвейера — все это пригодится в следующей статье, когда мы будем рассматривать экспортируемые модули и создание собственных командлетов.
Обработка ошибок
В PowerShell существует механизм Try…Catch…Finally, позволяющий обрабатывать исключительные ситуации. В блок Try помещается код, в котором может возникнуть ошибка, а в блок Catch — ее обработчик. Если ошибки не было, он не выполняется. Блок Finally выполняется после блока Try вне зависимости от возникновения ошибки, а блоков Catch может быть несколько для исключений различных типов. Само исключение записывается в не требующую объявления переменную по умолчанию ($_) и может быть легко извлечено. В примере ниже мы реализуем защиту от ввода некорректного значения:
try {
[int]$test = Read-Host "Введите число"
100 / $test
} catch {
Write-Warning "Некорректное число"
Write-Host $_
}
На этом рассмотрение основ программирования на языке PowerShell стоит закончить. В следующих статьях мы подробнее изучим работу с переменными разных типов, коллекции, регулярные выражения, создание функций, модулей и собственных командлетов, а также объектно-ориентированное программирование.
Часть 1: основные возможности Windows PowerShell
Часть 3: передача параметров в скрипты и функции, создание командлетов
Часть 4: Работа с объектами, собственные классы
IDLE
Python — один из самых популярных в мире языков программирования, который поддерживает сценарий скриптов. Он легок в освоении, имеет быструю скорость выполнения кода, а также может стать один из главных языков для написания небольших скриптов. Из-за этого мы предлагаем сначала взять во внимание этот ЯП и его стандартную интегрированную среду разработки под названием IDLE. Данный инструмент не нужно загружать отдельно, поскольку его получение происходит вместе с основными компонентами Python при их скачивании с официального веб-ресурса. Хоть эта программа, как можно понять по представленному далее скриншоту, и не имеет особенностей внешнего вида или каких-то дополнительных элементов интерфейса, она отлично подойдет для того, чтобы писать небольшие скрипты. В ней подсвечивается синтаксис, есть продвинутая система отчета об ошибках, а компилирование кода можно запустить горячей клавишей, ознакомившись с результатом в новом окне.
Что касается функциональных особенностей IDLE, то этот софт реализовывает те же стандартные действия, что и другие среды разработки, позволяя писать, запускать, сохранять код и использовать режим отладки. Отдельно стоит принять во внимание Shell — консоль для просмотра информации о выполненном коде, где и отображаются уведомления об ошибках, если они вдруг встречаются. Эта оснастка запускается в виде нового окна, где и показаны результаты обработки скрипта, а если обнаружатся какие-то ошибки, вы будете оповещены о них и быстро сможете отследить проблемную строку. Если рассматриваемая среда разработки станет вашим основным инструментом для написания скриптов, обязательно обратите внимание на огромное количество встроенных горячих клавиш, поскольку их знание позволит упростить процесс взаимодействия с софтом.
Скачать IDLE с официального сайта
PyCharm
PyCharm — продвинутая альтернатива предыдущему решению, созданная известной компанией под названием JetBrains. Разработчики постарались реализовать в своей программе те опции, которые пригодятся профессиональным разработчикам и окажут значимое влияние на комфортность взаимодействия с софтом. Самая главная из них, предназначенная для повышения удобства, — встроенный умный редактор. Как только вы начинаете набирать команду, редактор отображает возможные варианты автозаполнения, а вам остается лишь подтвердить его, нажав по клавише Enter. Это же позволяет исключить большинство опечаток или случайных ошибок еще до запуска компилирования, сэкономив тем самым время, которое могло быть затрачено на исправление в дальнейшем.
Присутствует в программе и удобная функция поиска по составляющим проекта. Это может быть файл, символ или конкретный фрагмент кода, перемещение к которому произойдет буквально в пару кликов. При написании скриптов такая возможность тоже окажется полезной, ведь иногда сценарий состоит из множества строчек кода. При первом же запуске PyCharm вам станет доступно огромное количество полезных функций для разработчиков без надобности установки дополнительных библиотек. К ним относятся: инструменты отладки, тестирования и профилирования, поддержка популярных баз данных (Oracle, SQL Server, PostgreSQL, MySQL и другие). Подходит PyCharm для выполнения любых задач на языке программирования Python, включая и веб-разработку, поскольку присутствует совместимость с HTML и JavaScript. Подводя итоги по рассмотренному софту, можно понять, что он станет отличным вариантом для постоянной работы тем юзерам, кто собирается использовать Python не только для написания скриптов, но и полноценной разработки или математических вычислений.
Скачать PyCharm с официального сайта
IntelliJ IDEA
Еще одно решение от тех же разработчиков, но уже ориентированное на работу с разными языками программирования. Из тех, которые поддерживают создание скриптов, можно отметить JavaScript, Python и Ruby, но если вы вдруг решите реализовать сложный сценарий на C++, никаких проблем с этим тоже быть не должно, однако не стоит забывать, что этот ЯП не совсем подходит для написания сценариев и лучше обратить внимание на другие методы выполнения задачи. В IntelliJ IDEA присутствует удобный инструмент компилирования, поддерживаются горячие клавиши, а найденные ошибки сразу же отображаются в консоли. Умный редактор, предлагающий дополнить вводимый код, функционирует немного иначе, чем в других средах разработки, поскольку в этом случае разработчики решили сделать алгоритм подстраиваемым под контекст, а не общие правила.
При частом выполнении конкретной операции или вызове команды, что будет актуально и для скриптов в IntelliJ IDEA, упомянутое средство заполнения предложит ее автоматизировать, чтобы больше не пришлось тратить на ввод лишние секунды. Это приложение не обошлось без недостатков, главный из которых связан со скоростью обработки кода при компилировании. Конечно, обычно скрипты состоят из небольшого количества строк, но часто они обращаются к другим программам или файлам, что при обработке может вызвать появление некоторых задержек. Создатели все еще работают над оптимизацией производительности, но пока неизвестно, когда она станет идеальной.
Скачать IntelliJ IDEA с официального сайта
Eclipse
Eclipse — одна из самых известных сред разработки, которая приглянулась большому количеству девелоперов из-за простой интеграции со свободно подключаемыми модулями. Если говорить об изначальном предназначении данной программы, то разработчики акцентировали внимание на Java, однако сейчас, установив всего несколько дополнительных библиотек, вы можете свободно программировать на любом популярном языке, включая и скриптовые. Иногда создание скриптов подразумевает подключение плагинов или отдельных модулей, которые будут задействованы при обработке кода и вызове определенных команд. В таком случае Eclipse окажется как никогда кстати как раз из-за отличной совместимости с библиотеками.
Классические функции типа подсветки синтаксиса, отображения ошибок в консоли и автозаполнения, естественно, здесь присутствуют и работают по стандартным принципам. Никаких проблем и трудностей при использовании Eclipse только для написания небольших сценариев возникнуть не должно, однако надо учесть, что при тесном взаимодействии в профессиональных целях могут появиться проблемы из-за нехватки документации и нестабильных обновлений, поскольку этот софт открыт и разработку постоянно ведут разные люди.
Скачать Eclipse
Netbeans
Следующий софт, который подойдет для использования скриптовых ЯП, называется Netbeans. Это бесплатный инструмент, поддерживающий Java, JavaScript, Python, PHP, C, C++ и другие языки программирования. Соответственно, вы сами выбираете, какой скрипт хотите написать, а среда разработки не ставит никаких ограничений в этом плане. На официальном сайте можете ознакомиться с доступными подключаемыми плагинами: большинство из них предназначены для полноценной разработки, но некоторые окажутся полезными и при создании скриптов. Привычные опции, например, быстрое редактирование кода или отображение ошибок в режиме реального времени, тоже есть в рассматриваемом софте. Поддерживается Netbeans как на Windows, так и на Linux, поэтому каждому под силу оптимизировать скрипты для выполнения в конкретных операционных системах.
Наличие огромного количества встроенных и заранее подключенных библиотек не могло не сказаться на производительности. Медленный процесс обработки особенно будет заметен, когда обращение происходит к отдельным файлам или при компилировании скрипта вызывается работой одной из программ, установленных на компьютере. Однако при взаимодействии со сценариями это редко проявляется, поскольку, как уже было сказано выше, строчек кода здесь не так много и задержки не появляются. Предлагаем перейти по ссылке ниже, чтобы попасть на официальный сайт Netbeans и ознакомиться со всеми функциональными особенностями этого софта.
Скачать Netbeans с официального сайта
RubyMine
Ruby — один из самых часто используемых языков программирования для написания скриптов, поскольку он минималистичен и крайне прост в освоении теми пользователями, кто знаком с другими ЯП, но подбирает себе вариант именно для работы с небольшими сценариями. Компания JetBrains предоставляет независимую среду разработки для этого языка, которая называется RubyMine. Однако при должном подходе и правильном освоении самого софта его можно использовать, чтобы написать код на CSS, HTML, JavaScript, Rails и SASS, если это нужно будет для других целей в разработке.
Пропустим основные функции, поскольку вы уже много раз слышали о них, и лучше отметим, что в RubyMine встроены системы отладки, позволяющие быстро оптимизировать код, написанный на Ruby. Есть и интеграция с CVS, Git, Mercurial, Perforce и Subversion. При работе с большими проектами, состоящими из нескольких файлов, они будут группироваться в древовидном стиле, что сделает процесс анализа более комфортным. Обратите внимание, что для стабильной работы этой среды разработки понадобится не менее 4 гигабайт оперативной памяти, а сам софт распространяется на платной основе, но с доступной триальной версией сроком на 30 дней. Загрузите ее и попробуйте, чтобы сформировать решение о покупке.
Скачать RubyMine с официального сайта
Notepad++
Предлагаем затронуть тему и классических текстовых редакторов, которые могут использоваться для написания кодов и станут особенно полезными при создании небольших скриптов, и первый из них называется Notepad++. В нем есть подсветка синтаксиса, нумерация строк, функции поиска и преобразование кодировок. Дополнительно ничего не помешает подключить плагины, если стандартный набор инструментов вас не устраивает.
Notepad++ станет отличным выбором среди тех, кто не хочет инсталлировать сложные среды разработки и просто не нуждается в настолько широкой функциональности. Дополнительно уточним, что при желании в нем можно записать макросы, которые будут полезны при постоянном осуществлении одинаковых действий. Интерфейс полностью переведен на русский, поэтому проблем в понимании отдельных меню и настроек не будет. Порог вхождения в Notepad++ минимальный, что позволит обойтись без использования официальной документации.
Скачать Notepad++
Еще на нашем сайте вы можете найти полезную инструкцию по использованию рассматриваемого софта. Она будет полезна начинающим юзерам, кто только обучается написанию скриптов и ранее не сталкивался с выполнением поставленной задачи. Это же руководство позволит более детально узнать обо всех возможностях Notepad++ и понять, насколько эта программа подходит для постоянного взаимодействия.
Подробнее: Использование текстового редактора Notepad++
SublimeText
SublimeText — самый распространенный текстовый редактор, свободно применяемый для написания кода, ведь он совместим со многими популярными языками программирования, подсвечивает синтаксис, а также имеет встроенную функцию автозаполнения, которая поможет сэкономить время при создании скрипта. Весь перечень поддерживаемых ЯП находится на официальном сайте данной программы, поэтому перед скачиванием рекомендуем с ним ознакомиться, убедившись в том, что это решение удовлетворит ваши потребности.
Отличается SublimeText от других продвинутых текстовых редакторов минималистичным и приятным интерфейсом, поддержкой вкладок, с которыми можно работать одновременно, даже если на каждой из них используются разные языки программирования. Еще стоит отметить высокую скорость работы, что важно при написании скриптов, и наличие консоли, где вы сразу можете ознакомиться с результатами выполнения кода и узнать, возникли ли во время обработки какие-либо ошибки.
Скачать SublimeText
Ivan Sampovsky
10 янв
Автор
Т.е. в powershell я смогу собрать этот скрипт в отдельный файл? Пойду щас загуглю
Ответить
Развернуть ветку
Мудрый фитиль
10 янв
Интересует сортировка файлов по имени из имеющийся бд(обычный текстовик)
А можно не париться, импортнуть в xlsx и получить сортировки внутри экселя
Ответить
Развернуть ветку
Ivan Sampovsky
10 янв
Автор
ну мне именно файлы нужно отсортировать и по местам раскидать, хз как в таком сценарии excel юзать
Ответить
Развернуть ветку
Мудрый фитиль
10 янв
А, тогда да, просто выглядело как работа со списком файлов просто
Ответить
Развернуть ветку
Фабиус Байл
10 янв
Да, в винду даже встроена ide для powershell
Ответить
Развернуть ветку
Йожег-тян
10 янв
Мб я упрлс, но на го можно еще именно в силу того, что он в один экзешник компилируется.
Ответить
Развернуть ветку
Никто и никогда
10 янв
Бесполезный коммент. Можно и на JAVA, и на C++, и на Python… Вопрос был про скрипт, а не отдельную софтину писать.
Ответить
Развернуть ветку
Pick Up
10 янв
Именно твой коммент и является бесполезным. Иди читай, что такое скрипт, а потом что то пиши.
Ответить
Развернуть ветку
Никто и никогда
10 янв
Лол, ты щас разрабу будешь пояснять за скрипты и софт? Ну давай, нагугли мне чего я ещё не знаю. Или нагугли как на ГО написать скрипт чисто виндовыми средствами, чтоб запускать его из скедулера без компиляции.
Ответить
Развернуть ветку
Йожег-тян
10 янв
Ответ на этот, а так же на вопросы «как похудеть, поедая тортики на ночь?», «как выучить хаскель за 5 минут» в нашей новой книге «Никак!». Я всего лишь предположил, что если задача «написать на чем угодно, засунуть это в один файл, желательно экзешник, и запускать его на других машинах без лишних манипуляций», то это помимо всего прочего отличная задача для го.
Ответить
Развернуть ветку
Pick Up
10 янв
Мне то зачем гуглить? Если ты написал херню какую то, почему я должен гуглить?
Если ты считаешь что ты не можешь написать скрипт на любом языке, о чем с тобой разговаривать?
Ты явно не понимаешь, что такое скрипт, поэтому я и отправил тебя гуглить, в чем твоя проблема?
Ответить
Развернуть ветку
Никто и никогда
10 янв
Я знаю что такое скрипт и что можно его писать на чем угодно. Только вот проблема в том что в винде нет интерпретатора ГО, Джавы и т.д. чтобы сходу его запустить. Так что скриптом в голой винде это назвать — хуета.
Ответить
Развернуть ветку
Kristaller
10 янв
Го — компилируемый язык программирования. Ему не нужен внешний рантайим для запуска, но имхо, писать на нем скрипты для себя — гиблая идея, он для этого не предназначен.
Ответить
Развернуть ветку
Йожег-тян
10 янв
Смотря какие: залезть в БД, что-то оттуда вытащить, записать в файлы и т.п. — самое то.
Ответить
Развернуть ветку
Никто и никогда
10 янв
Ок, спасибо за ссылку, видимо я отстал немного, признаю, почитаю на досуге.
Ответить
Развернуть ветку
Мудрый фитиль
10 янв
Не стоит. WSL тащить для скриптинга под винду — совет из разряда «установите MySQL для ведения простого TODO-листа»
А конкретно с golang — там есть вещи, которые не работают нормально в винде, т.к. не под нее он делался
Тащить компилируемые языки для скриптинга — там уже ниже отписали, что идея тоже такое себе
Ответить
Развернуть ветку
Никто и никогда
10 янв
Ну вот я к тому же и вел, просто уже мозг плывет и пишу как даун. Начало года же, все по пизде пошло и сам щас весь скриптами обложился на работе.
Ответить
Развернуть ветку
Никто и никогда
10 янв
Чтобы норм работал там как минимум нужен вижуал, что уже костыль
Ответить
Развернуть ветку
Pick Up
10 янв
Ну, это уже другой вопрос, главное , что можно. Вопрос Нахера остаётся открытым
Я б ваще на повершелле написал, + vbs чтоб не палиться
Ответить
Развернуть ветку
Никто и никогда
10 янв
Ну да, это самый правильный вариант будет, согласен. Вот в споре и родили истину для ТСа.
Ответить
Развернуть ветку
Deckard
10 янв
Всл когда я последний раз проверял всё ещё требовал скачать дистрибутив.
Ответить
Развернуть ветку
Йожег-тян
10 янв
Да, хоть горшком назови, только в печку не ставь. Мне норм простенькие штуки иногда и в го пописать, благо там разувесистая стандартная библиотека и сторонних полно. Назвать эти поделки «отдельными софтинами» можно конечно, но см. выше.
Ответить
Развернуть ветку
Kristaller
10 янв
Питончик наше всё. Проще и мощнее, чем powershell, куча библиотек для всего и вся
Ответить
Развернуть ветку
Ivan Sampovsky
10 янв
Автор
Ну на питончике кншн прикольно, но я хз как на нём писать скрипты именно для работы в винде
Ответить
Развернуть ветку
Kristaller
10 янв
Ну, так же как и в любом другом месте. Файлы читать-писать можно, любую информацию у системы просить можно, даже биндинг для win32api есть, что ещё надо то?
Ответить
Развернуть ветку
Pick Up
10 янв
Пофиг на чем, главное выполнить цель, затем собрать в NSIS
Ответить
Развернуть ветку
Читать все 35 комментариев
Сегодня поговорим об очень полезном компоненте операционной системы Windows — это Windows Script Host, если быть конкретней, то о языке Jscript, на котором можно писать эти самые WSH скрипты.
Начнем мы с небольшой теории, так как мы еще не затрагивали Windows Script Host.
Содержание
- Что такое Windows Script Host?
- Возможности Windows Script Host
- Примеры написания WSH скриптов
- Выводим сообщение на JScript
- Работа с Excel на JScript
- Работа с текстовым файлом и Excel на JScript
Что такое Windows Script Host?
Windows Script Host – сервер выполнения сценариев (скриптов) на таких языках как VBScript и JScript. WSH разработан компанией Microsoft и он является компонентом операционной системы Windows начиная с Windows 98.
Первоначально для администрирования использовались только bat-файлы, но их возможности ограничены (хотя также очень полезны!), поэтому компания Microsoft предложила такой вариант WSH. Возможности WSH-скриптов уже гораздо больше, ведь данные скрипты уже создаются на полноценных языках, таких как VBScript и JScript.
Именно о JScript мы сегодня и поговорим.
Но о VBScript мы тоже скажем пару слов.
VBScript – это скриптовой язык программирования, созданный компанией Microsoft для разработки скриптов в операционной системе Windows. Другими словами, это один из языков, которые может интерпретировать Windows Script Host. И из названия ясно, что VBScript основан на языке Visual Basic, поэтому тем, кто знаком с Visual Basic будет просто писать WSH-скрипты на этом языке программирования.
JScript – скриптовой язык программирования, с помощью которого можно создавать (писать) скрипты, которые будут интерпретироваться компонентом Windows Script Host.
С первого взгляда JScript во многом похож на JavaScript (ECMAScript), это и естественно, так как синтаксис, некоторый объекты, методы, свойства аналогичны JavaScript. Но это все же не JavaScript, а именно JScript. JavaScript (ECMAScript) ориентирован на объекты браузера, а JScript уже на компоненты операционной системы Windows. Но как мы сказали, они похожи, поэтому те, кто владеют языком программирования JavaScript с легкостью перейдут на JScript.
Возможности Windows Script Host
А теперь давайте поговорим о том, зачем нам нужно писать эти самые WSH-скрипты, т.е. об их возможностях и преимуществах:
- Возможность взаимодействия с файловой системой (файлы, каталоги), системным реестром, ресурсами локальной сети;
- Взаимодействие с такими продуктами как Microsoft Word, Excel и другими программами. Т.е. например, мы можем создавать excel файлы или конвертировать другие форматы в excel файлы;
- Взаимодействие с ActiveX-технологиями, например: ActiveX Data Object (ADO) — доступ к базам данных разных форматов, Active Directory Service Interface (ADSI) — работа со службами каталогов Active Directory;
- Наличие полноценного языка программирования, с помощью которого можно реализовывать сложные алгоритмы, которые например нельзя реализовать с помощью bat файлов.
Скрипты на JScript имеют расширение .js такое же, как и на JavaScript за исключением того, что эти скрипты обрабатывает не браузер, а Windows Script Host.
На JScript возможно даже реализация графического интерфейса через объект браузера (internet explorer), согласитесь это уже полноценная программа.
Перейдем к практике, так как у нас сегодня статья по основам, мы рассмотрим простые примеры написание скриптов на JScript.
Примечание! Для того чтобы попробовать примеры ниже скопируйте код любого примера в текстовый файл и сохраните с расширением .js, например, test.js.
Выводим сообщение на JScript
В WSH имеется специальный объект, на основе которого мы уже можем в дальнейшем создавать другие объекты, настраивать взаимодействие с программами, файлами и другими компонентами операционной системы.
Этим объектом является WScript. Пример его использования на Jscript:
var WshShell = WScript.CreateObject("WScript.Shell");
Тем самым мы создали объект, с помощью которого мы можем получить доступ к компонентам Windows.
Например, вывести сообщение:
//Выводим сообщение WshShell.Popup( "Моя первая программа на JScript"); //Завершаем работу с объектом WScript.Quit();
Работа с Excel на JScript
Теперь давайте создадим другой объект, например, Excel файл:
// создаем объект для работы с Excel var Excel = WScript.CreateObject("Excel.Application"); // добавляем книгу в Excel Excel.WorkBooks.Add; //добавляем в первую ячейку нужный текст Excel.Cells(1,1).Value ="Мой текст для вставки в Excel"; // делаем активным наш Excel документ Excel.Visible = true;
Как Вы понимаете, мы имеем доступ ко всем свойствам в Excel, другими словами, мы можем изменить внешний вид, задать формат ячеек и многое другое. Для примера давайте поэкспериментируем с некоторыми свойствами:
//создаем объект для работы с Excel var Excel = WScript.CreateObject("Excel.Application"); //добавляем книгу в Excel Excel.WorkBooks.Add; //выделяем нужный нам диапазон Excel.Range("A1:C1").Select; //объединяем ячейки в нашем диапазоне Excel.Selection.MergeCells = true; //добавляем нужный текст Excel.Selection.Value ="Мой текст для вставки в Excel"; //делаем наш текст жирным Excel.Selection.Font.Bold = true; //изменяем в 4 ячейке формат данных на числовой с двумя знаками после запятой Excel.Cells(1, 4).NumberFormat = "00.00" //вставляем в 4 ячейку нашу цифру Excel.Cells(1, 4).Value = 1234; //выровняем по центру наше значение Excel.Cells(1, 4).HorizontalAlignment = 3; //делаем активным наш Excel документ Excel.Visible = true;
Работа с текстовым файлом и Excel на JScript
Я думаю с Excel все понятно, теперь давайте прочитаем какие-нибудь данные из текстового файла и запишем их в нашу Excel таблицу, для закрепления наших знаний.
Для того чтобы настроить взаимодействие с файловой системой, необходимо создать объект FileSystemObject, который работает с файлами и каталогами. Вот пример небольшого скрипта, который считывает данные из текстового файла построчно и записывает их в Excel документ, причем мы все строки пронумеруем и зададим ширину столба для данных в Excel:
Пример текстового файла:
Первая строка Вторая строка Третья строка
Пример скрипта:
//создаем объект FileSystemObject var FileSysObj = WScript.CreateObject("Scripting.FileSystemObject"); //объявляем нужные нам переменные var nRow = 1, num=1; var txt = ''; //открываем файл my.txt в той же папке, параметр 1 для чтения файла var myText = FileSysObj.OpenTextFile('my.txt', 1 ); //как и раньше создаем объект для работы с Excel var Excel = WScript.CreateObject("Excel.Application"); //добавляем книгу в Excel Excel.WorkBooks.Add; //циклом считываем строки из файла, пока они не закончатся // и записываем их в наш Excel документ while (!myText.AtEndOfStream) { //считываем строку txt = myText.ReadLine(); //нумеруем наши строки в Excel Excel.Cells(nRow, 1).Value = num; //выставляем ширину вторго столбца Excel.Columns(2).ColumnWidth = 15; //записываем данные в ячейку Excel.Cells(nRow, 2).Value = txt; //увеличиваем переменные на 1 nRow++; num++; } //закрываем файл myText.Close(); //делаем активным наш Excel документ Excel.Visible = true; //выходим из скрипта WScript.Quit();
Как всегда весь код я прокомментировал, поэтому неясностей возникнуть не должно.
Я думаю для начала этого вполне достаточно, в дальнейшем мы будем разбирать задачи посложней, ведь при помощи Jscript в WSH можно очень много чего сделать, гораздо больше, чем с помощью простых bat файлов. До встречи!
Основы скриптов на PowerShell.
https://gbcdn.mrgcdn.ru/uploads/post/998/og_cover_image/136640dcd4ae5c224e8596715579ad95
Если вы только недавно встали на путь программирования и ещё даже не пробовали поиграться с установленной операционной системой, то манипулирование с помощью скриптов может вызвать резонные вопросы необходимости и удобства. Однако, даже если опустить тот простой факт, что они помогают лучше понять, как функционирует ОС, в будущем при создании приложений, исполнение сценариев может оказаться крайне полезным навыком.
Для исполнения следующих скриптов мы обратимся к PowerShell. Любой системный администратор (по профессии или в душе) знает его возможности и периодически пользуется, для всех остальных это просто интерфейс командной строки или иностранное слово. На популярных ресурсах вы можете найти уйму идей, как использовать PowerShell для развлечения и дела, здесь же мы рассмотрим лишь простые скрипты, которые помогут войти в курс дела.
Выключение и перезапуск
Итак, самая простая операция выключения вашего компьютера. Открываем блокнот, прописываем:
shutdown -s -t 0
Сохраняем файл, как *.cmd (*- имя вашего файла, например shutdown.cmd) и не забудьте в типе выбрать “все файлы”. Всё, исполняемый файл по запуску выключит ваш компьютер. “-s”, в данном случае означает выключение, замените на “-r” — получите перезагрузку. “-t” — таймер, у нас он установлен на 0 секунд, но если установить на 60 — получите выключение через 60 секунд.
Удаляем ненужное
В различных сборках, предустановленных на компьютер или ноутбук, вы можете наткнуться на массу абсолютно ненужных пакетов приложений. Удалить их с помощью скрипта проще простого:
get-appxpackage -name *APPNAME* | remove-appxpackage
Как вы понимаете, *APPNAME* — название неинтересующей надстройки. Да, удалять эти пакеты можно стандартным путём или через специальные программы, но вы можете создать скрипт, который удалит их все одним двойным кликом.
Управляем процессами
Есть в PowerShell две полезные команды, которые позволят бороться с ветряными мельницами (процессами, снижающими быстродействие). Вывести их на экран можно просто прописав:
Get-Service
или информацию о конкретном сервисе под кодовым названием *NAME* (на этом месте должно быть название интересующего сервиса):
Get-Service *NAME*
Но это можно сделать в диспетчере задач, а вот действительно полезным может оказаться создание файла, который по клику закрывал бы все процессы с повышенным потреблением ресурсов (браузеры, антивирусы и пр.). Для этого воспользуйтесь командой Stop-Service:
Stop-Service -Name *ANTIVIRUS*
Stop-Service -Name *BROWSER*
Названия для замены указаны в * *.
Переименовываем группу файлов
Ещё одна назойливая проблема: вы скопировали с фотоаппарата или телефона изображения. Огромная куча фотографий, которые называются однотипно вроде HGNMD034, где HGNMD — название общей директории, объединяющей файлы, например, отснятые за один день. Для того, чтобы сделать название этих файлов приятнее или иметь возможность объединить несколько папок, не получив при этом хронологическую путаницу из-за имен, можно использовать скрипт группового переименования:
$path = «$compdesktopjourneyrussia»
$filter = ‘*.jpg’
get-childitem -path $path -filter $filter |
rename-item -newname {$_.name -replace ‘HGNMD’,’RUSSIA’}
В первой строке в кавычках укажите точный путь к файлам. Во второй строке — расширение файлов, подлежащих изменению. В последней строке вместо “HGNMD” — общее в названиях файлов, подлежащее замене, на что-то, вместо “RUSSIA” — имя, которое вы хотите присвоить. Если данный скрипт опять сохранить в качестве исполняемого файла, то подобные однотипные операции будут отнимать у вас всего несколько секунд времени.
Ищем файлы
Ещё одна простая задача, реализуемая на PowerShell — поиск файлов в директории. В данном случае рассмотрим поиск log-файлов:
Get-Childitem C:Windows*.log
Или чуть более сложный пример, когда поиск будет производиться ещё и в подпапках:
Get-ChildItem C:Windows* -Include *.log -Recurse -Force
Это чуть более правильная и полная запись, где “Include” — указывает на искомую часть, “Recurse” — на поиск во вложенных каталогах, “Force” — поиск включает в себя системные и скрытые файлы.
Справка
Итак, с общими принципами функционирования PowerShell мы более-менее разобрались. Если что-то непонятно — обратитесь к справочной информации следующим образом:
Get-Help Services
Это команда, которая выведет на экран все доступные команды с кратким описанием. Хотите подробнее? Нет ничего проще:
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. Данный язык программирования используется во всех ОС Microsoft начиная с Windows XP SP3. Писать Powershell скрипты должен уметь каждый уважающий себя системный администратор windows.
Все команды в Powershell как правило используются в форме командлетов. Все командлеты это специализированные классы .NET Framework и .NET Core (используется в PowerShell Core 6 и выше).
Powershell класса .NET Framework это версии с 1 по 5.1 а Powershell .NET Core это версия 6 и выше (на данный момент 7.0). По заявлению Microsoft новых функций в Powershell 5.1 (.NET Framework) вносить уже не будут. Однако 7 версия еще не полностью поддерживает все модули предыдущих версий. Но судя по всему Microsoft стремится к этому и скоро версия Core будет единственной. В общем cmd отходит в прошлое и теперь без Powershell никуда. Давайте приступим к практике. Так всегда лучше запоминается материал.
Запуск Powershell
На примере Windows 10 Powershell можно запустить просто нажав правой кнопкой мыши на меню пуск.
Также нижняя строчка позволяет запустить Powershell с повышенными правами администратора.
Еще можно воспользоваться поиском в WIndows 10 и ввести название powershell
Как видно на картинке выше нашелся не только Powershell но и Powershell ISE. Консоль powershell удобна если требуется запустить последовательно не больше одной команды. Либо несколько команд в конвейере. Однако в случае написания полноценных скриптов лучше использовать Powershell ISE. Это бесплатная среда разработки сценариев на языке Powershell поставляется вместе с ОС Windows.
Сразу после запуска консоли рекомендую запустить командлет Get-Help — встроенная справка по всем командлетам, аналог man в Linux.
Видим что консоль предлагает обновить встроенную помощь. Нажимаем Y и соглашаемся.
Командлеты
Командлеты — это название команд в Powershell. Каждый командлет реализует заложенную в него функциональность. Как правило наименование командлета состоит из пары: глагол-существительное. Например: Get-Help — получить помощь. Обычно Get используется чтобы получить информация, Set — внести изменение, New — создать новый объект, политику и т.п. и Remove -удалить объект, политику и т.п.
Командлеты не чувствительны к регистру. Написать Get или get не важно, powershell воспримет эти команды одинаково.
Чтобы получить список всех доступных командлетов необходимо использовать Get-Command
Для получения справки по любому командлету напишите Get-Help имя-комндлета. Например
Давайте представим что нам необходимо вывести список командлетов для управления процессами. Воспользуемся Get-Command и укажем ему параметры для более точного поиска.
И вот мы видим список командлетов позволяющих управлять процессами: Get-Process — список всех запущенных процессов, Start-Process — запустить указанный процесс, Stop-Process— остановить указанный процесс, Wait-Process — ожидать указанный процесс. Как видно из названий командлетов можно легко понять для чего каждый служит.
Используя командлет Get-Help можно получить справку по любому командлету.
PS C:WINDOWSsystem32> Get-Help Get-Process ИМЯ Get-Process ОПИСАНИЕ Gets the processes that are running on the local computer or a remote computer. СИНТАКСИС Get-Process [[-Name] <System.String[]>] [-ComputerName <System.String[]>] [-FileVersionInfo] [-Module] [<CommonParameters>] Get-Process [-ComputerName <System.String[]>] [-FileVersionInfo] -Id <System.Int32[]> [-Module] [<CommonParameters>] Get-Process [-ComputerName <System.String[]>] [-FileVersionInfo] -InputObject <System.Diagnostics.Process[]> [-Module] [<Com monParameters>] Get-Process -Id <System.Int32[]> -IncludeUserName [<CommonParameters>] Get-Process [[-Name] <System.String[]>] -IncludeUserName [<CommonParameters>] Get-Process -IncludeUserName -InputObject <System.Diagnostics.Process[]> [<CommonParameters>] ОПИСАНИЕ The `Get-Process` cmdlet gets the processes on a local or remote computer. Without parameters, this cmdlet gets all of the processes on the local computer. You can also specify a particular process b y process name or process ID (PID) or pass a process object through the pipeline to this cmdlet. By default, this cmdlet returns a process object that has detailed information about the process and supports methods that l et you start and stop the process. You can also use the parameters of the `Get-Process` cmdlet to get file version informati on for the program that runs in the process and to get the modules that the process loaded. ССЫЛКИ ПО ТЕМЕ Online Version: https://docs.microsoft.com/powershell/module/microsoft.powershell.management/get-process?view=powershell-5.1 &WT.mc_id=ps-gethelp Debug-Process Get-Process Start-Process Stop-Process Wait-Process ЗАМЕЧАНИЯ Для просмотра примеров введите: "get-help Get-Process -examples". Для получения дополнительных сведений введите: "get-help Get-Process -detailed". Для получения технических сведений введите: "get-help Get-Process -full". Для получения справки в Интернете введите: "get-help Get-Process -online"
При использовании командлета есть возможность указать несколько параметров при запуске. Первый параметр можно не называть. Выше я писал Get-Command *Process* где указал поиск командлетов со словом Process. Однако я не написал параметр -Name, хотя именно его и указал. Если полностью то поиск по имени выглядит так: Get-Command -Name *Process* . В случае отсутствия непосредственного указания -Name Powershell принимает в качестве имени введенное слово *Process*.
Давайте выведем список процессов с именем WhatsApp
Get-Process -Name WhatsApp -IncludeUserName
Мы вывели все процессы с именем WhatsApp и добавили в вывод дополнительный параметр -IncludeUserName, что позволило нам увидеть кем запущен процесс.
Алиасы
Алиасы в Powershell это по сути более короткие названия командлетов. Т.е. любому командлету можно присвоить свое короткое имя (alias). Например алиасом для командлета Get-Process является gps. Согласитесь куда проще и быстрее написать gps чем Get-Process.
Список всех alias можно получить используя командлет Get-Alias
PS C:WINDOWSsystem32> get-alias CommandType Name Version Source ----------- ---- ------- ------ Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin Alias cat -> Get-Content Alias cd -> Set-Location Alias CFS -> ConvertFrom-String 3.1.0.0 Microsoft.PowerShell.Utility Alias chdir -> Set-Location Alias clc -> Clear-Content Alias clear -> Clear-Host Alias clhy -> Clear-History Alias cli -> Clear-Item Alias clp -> Clear-ItemProperty Alias cls -> Clear-Host Alias clv -> Clear-Variable Alias cnsn -> Connect-PSSession Alias compare -> Compare-Object Alias copy -> Copy-Item Alias cp -> Copy-Item Alias cpi -> Copy-Item Alias cpp -> Copy-ItemProperty Alias curl -> Invoke-WebRequest Alias cvpa -> Convert-Path Alias dbp -> Disable-PSBreakpoint Alias del -> Remove-Item Alias diff -> Compare-Object Alias dir -> Get-ChildItem Alias dnsn -> Disconnect-PSSession Alias ebp -> Enable-PSBreakpoint Alias echo -> Write-Output Alias epal -> Export-Alias Alias epcsv -> Export-Csv Alias epsn -> Export-PSSession Alias erase -> Remove-Item Alias etsn -> Enter-PSSession Alias exsn -> Exit-PSSession Alias fc -> Format-Custom Alias fhx -> Format-Hex 3.1.0.0 Microsoft.PowerShell.Utility Alias fl -> Format-List Alias foreach -> ForEach-Object Alias ft -> Format-Table Alias fw -> Format-Wide Alias gal -> Get-Alias Alias gbp -> Get-PSBreakpoint Alias gc -> Get-Content Alias gcb -> Get-Clipboard 3.1.0.0 Microsoft.PowerShell.Management Alias gci -> Get-ChildItem Alias gcm -> Get-Command Alias gcs -> Get-PSCallStack Alias gdr -> Get-PSDrive Alias ghy -> Get-History Alias gi -> Get-Item Alias gin -> Get-ComputerInfo 3.1.0.0 Microsoft.PowerShell.Management Alias gjb -> Get-Job Alias gl -> Get-Location Alias gm -> Get-Member Alias gmo -> Get-Module Alias gp -> Get-ItemProperty Alias gps -> Get-Process Alias gpv -> Get-ItemPropertyValue Alias group -> Group-Object Alias gsn -> Get-PSSession Alias gsnp -> Get-PSSnapin Alias gsv -> Get-Service Alias gtz -> Get-TimeZone 3.1.0.0 Microsoft.PowerShell.Management Alias gu -> Get-Unique Alias gv -> Get-Variable Alias gwmi -> Get-WmiObject Alias h -> Get-History Alias history -> Get-History Alias icm -> Invoke-Command Alias iex -> Invoke-Expression Alias ihy -> Invoke-History Alias ii -> Invoke-Item Alias ipal -> Import-Alias Alias ipcsv -> Import-Csv Alias ipmo -> Import-Module Alias ipsn -> Import-PSSession Alias irm -> Invoke-RestMethod Alias ise -> powershell_ise.exe Alias iwmi -> Invoke-WmiMethod Alias iwr -> Invoke-WebRequest Alias kill -> Stop-Process Alias lp -> Out-Printer Alias ls -> Get-ChildItem Alias man -> help Alias md -> mkdir Alias measure -> Measure-Object Alias mi -> Move-Item Alias mount -> New-PSDrive Alias move -> Move-Item Alias mp -> Move-ItemProperty Alias mv -> Move-Item Alias nal -> New-Alias Alias ndr -> New-PSDrive Alias ni -> New-Item Alias nmo -> New-Module Alias npssc -> New-PSSessionConfigurationFile Alias nsn -> New-PSSession Alias nv -> New-Variable Alias ogv -> Out-GridView Alias oh -> Out-Host Alias popd -> Pop-Location Alias ps -> Get-Process Alias pushd -> Push-Location Alias pwd -> Get-Location Alias r -> Invoke-History Alias rbp -> Remove-PSBreakpoint Alias rcjb -> Receive-Job Alias rcsn -> Receive-PSSession Alias rd -> Remove-Item Alias rdr -> Remove-PSDrive Alias ren -> Rename-Item Alias ri -> Remove-Item Alias rjb -> Remove-Job Alias rm -> Remove-Item Alias rmdir -> Remove-Item Alias rmo -> Remove-Module Alias rni -> Rename-Item Alias rnp -> Rename-ItemProperty Alias rp -> Remove-ItemProperty Alias rsn -> Remove-PSSession Alias rsnp -> Remove-PSSnapin Alias rujb -> Resume-Job Alias rv -> Remove-Variable Alias rvpa -> Resolve-Path Alias rwmi -> Remove-WmiObject Alias sajb -> Start-Job Alias sal -> Set-Alias Alias saps -> Start-Process Alias sasv -> Start-Service Alias sbp -> Set-PSBreakpoint Alias sc -> Set-Content Alias scb -> Set-Clipboard 3.1.0.0 Microsoft.PowerShell.Management Alias select -> Select-Object Alias set -> Set-Variable Alias shcm -> Show-Command Alias si -> Set-Item Alias sl -> Set-Location Alias sleep -> Start-Sleep Alias sls -> Select-String Alias sort -> Sort-Object Alias sp -> Set-ItemProperty Alias spjb -> Stop-Job Alias spps -> Stop-Process Alias spsv -> Stop-Service Alias start -> Start-Process Alias stz -> Set-TimeZone 3.1.0.0 Microsoft.PowerShell.Management Alias sujb -> Suspend-Job Alias sv -> Set-Variable Alias swmi -> Set-WmiInstance Alias tee -> Tee-Object Alias trcm -> Trace-Command Alias type -> Get-Content Alias wget -> Invoke-WebRequest Alias where -> Where-Object Alias wjb -> Wait-Job Alias write -> Write-Output
Как видно из списка для alias использованы аналогичные по значению команды из Linux: ls, man, mount, md, kill и т.п. Видимо чтобы линуксоиду было по привычнее 🙂 Можно создать свой alias используя командлет New-Alias
Конвейер
Конвейер используется для передачи выходных данных командлета идущего вначале во входные данные командлета следующего за ним. Ничего непонятно? 🙂 Давайте на примерах, так всегда яснее.
Возьмем уже известный нам командлет Get-Process, посмотрим на его вывод
Как по мне многовато лишних столбцов. Мне эта информация не нужна, поэтому я выберу только нужные данные. Для таких целей служит командлет Select-Object. Давайте используем его в конвейере.
Get-Process|Select-Object ID,CPU,ProcessName
Как вы уже наверно догадались конвейер обозначается знаком | и идет сразу следом за командлетом. И так данные по конвейеру можно передавать и дальше другим командлетам. Итак я передал выходные данные (список запущенных процессов) на вход командлета Select-Object. Который в свою очередь выбрал данные по 3 столбцам ID, CPU, ProcessName. Теперь можно передать эти данные дальше. Например выгрузить в текстовый файл
Get-Process|Select-Object ID,CPU,ProcessName|Out-File C:TMPout.txt
Просто не правда ли? У нас конвейер из трех командлетов, на выходе которого получаем текстовый файл со списком запущенных процессов и необходимой информацией по ним.
Структура объектов
В Powershell объекты играют самую важную роль. От типа объекта зависит что именно с ним можно сделать. Узнать тип объекта и вывести список всех его элементов позволяет команда Get-Member
Вот далеко не полный список элементов командлета Get-Process. В данному случае тип данных это System.Diagnostics.Process
Давайте посмотрим тип данных у новой переменной
$new="Test" $new|Get-Member
В данном случае тип данных System.String т.е. строка. Что вполне логично. А теперь посмотрите что можно сделать с этой строкой с учетом указанных выше параметров.
Как видно на картинке выше мы заключаем нашу тестовую переменную $new в скобки и после них пишем точку и указываем метод. В примере я использовал три метода:
- ToUpper — перевод всех букв в строке в верхний регистр
- ToLower — перевод всех букв в строке в нижний регистр
- Length — подсчитать количество символов в строке
Это всего лишь небольшой пример что можно сделать с параметрами объекта. Чаще используйте Get-Member и вы откроете для себя безграничные возможности манипуляции над объектами.
Скрипты Powershell
В самом начале статьи указал на встроенный инструмент Powershell ISE. Давайте запустим его и создадим свой первый скрипт. Кстати скрипты сохраняются в файлах с расширением ps1
Скрипт будет запускать блокнот, далее выполняется проверка если блокнот запущен выводится сообщение об этом и после блокнот закрывается. Если блокнот не запущен то выводится соответствующее сообщение об этом. На самом деле блокнот будет всегда запущен, т.к. мы вначале скрипта написали Start-Process notepad
Start-Process notepad $a=Get-Process notepad if ($a.ProcessName -like "Notepad") { Write-Host "Блокнот запущен, давайте его закроем" Stop-Process -name notepad } else { Write-Host "Блокнот не запущен, что поделать" }
В этом скрипте я использовал цикл if else. О циклах будет подробнее в следующей статье. Итак давайте сохраним скрипт и выполним его.
В ответ мы получим такую ошибку:
Невозможно загрузить файл, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=1351 70. + CategoryInfo : Ошибка безопасности: (:) [], ParentContainsError RecordException + FullyQualifiedErrorId : UnauthorizedAccess
Все верно, изначально в WIndows запрещено выполнять скрипты Powershell. Это сделано для повышения безопасности системы. Для включения возможности запуска скриптов Powershell необходимо запустить Powershell от Администратора и ввести командлет Set-ExecutionPolicy с одним из параметров:
- Restricted — политика по умолчанию. Выполнение всех скриптов запрещено
- RemoteSigned — разрешено запускать собственные скрипты и подписанные доверенным разработчиком
- AllSigned — разрешено запускать скрипты, подписанные доверенным разработчиком. Каждый раз перед запуском такого скрипта PowerShell будет запрашивать подтверждение
- Unrestricted — в системе разрешается запускать любые скрипты
Если вы полностью уверены в запускаемых скриптах можете поставить Unrestricted. Давайте так и сделаем
Set-ExecutionPolicy -Unrestricted
Будет предупреждение по безопасности, соглашаемся нажав Y
Можем посмотреть текущую настройку политики безопасности при помощи командлета Get-ExecutionPolicy
В данной статье мы рассмотрели основы чтобы подготовиться писать скрипты Powershell. В следующих статьях мы более подробно изучим циклы, массивы, функции, работу со строками и много другое. Кстати вот раздел посвященный Powershell. Там много всего интересного 😉
Рекомендую к прочтению:
- Переменные
- Операторы сравнения
- Операторы условий
- Циклы