На чем писать скрипты под windows

Из этой статьи вы узнаете как писать программы или VBS скрипты и батники в обычном Блокноте Windows.

написать скрипт программу в блокнотеС этой статьей вы не научитесь программировать и даже не напишите как таковую программу, но найдете здесь отличные VBS скрипты и BAT файлы, которые без проблем напишете в обычном блокноте Windows, сможете усовершенствовать по своему, потом похвастаться перед друзьями и близкими. Возможно это поднимет вам настроение и вы отлично проведете время.

Большинство похожих скриптов пишутся для удобства и автоматизации каких-либо действий на компьютере с ОС Windows. Представленные же ниже скрипты мало окажутся полезными (может мне так кажется), но они отлично подойдут для первоначального знакомства с «кодингом». Вы отлично проведете время, удивив как себя, так и знакомых чайников (не программистов), плюс это еще один хороший вариант убить время за компьютером.

Немного терминологии:

  • VBS — язык программирования для создания скриптов в ОС Windows, создается/редактируется в Блокноте Windows, имеет разрешение «.vbs». Думаю, продолжать не имеет смысла, ибо это мало о чем скажет, особенно новичкам. Интересующимся — статья в Википедии.
  • BAT — пакетный файл, в народе просто «батник». Расширение файла «.bat». Дальше аналогично — статья в Википедии.

Данных расширений (vbs, bat) файлы создаются во всеми известном Блокноте Windows (Notepad). Для большего удобства создания скриптов рекомендуется использовать усовершенствованный (скажем так) блокнот — Notepad++. Он удобен подсветкой синтаксиса большого количества языков программирования, если вам это мало о чем говорит, то скачайте и пишите в нем — ошибок сделаете меньше в коде, ну или будет их проще найти, чем в том же мало функциональном Блокноте Windows.

Скачать Notepad++ можно на официальном сайте.

Для наглядности пример (слева — Блокнот Windows, справа — Notepad++):

Блокнот Windows и Notepad++

Приступим

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

Научим компьютер здороваться

  1. Открываем Блокнот (или Notepad Plus Plus).
  2. Копируем в вставляем код:

    Set sapi=CreateObject(«sapi.spvoice»)
    sapi.Speak «Hello!»

  3. Обязательное условие: кавычки должны быть “такими”, «ёлочки» не подойдут, скрипт не будет обрабатываться и выйдет ошибка. Вместо слова «Hello» можете написать что угодно, даже по русски, при наличии русского голосового движка.
  4. Дальше выбираем Файл — Сохранить как — Тип файла — Все файлы — название.vbs
  5. Называйте файл как хотите, но не забудьте в конце прописать расширение — .vbs (пример — Privet.vbs).
  6. Теперь пробуйте проверить свой скрипт — запустите файл двойным щелчок мыши.

Один нюанс: если вы прописали в кавычках слова русскими буквами, а при запуске произносится непонятно что, то у вас просто не установлен русский голосовой движок. Подробная установка и настройка голосового движка выходит за рамки нашей статьи, поэтому более подробно ознакомьтесь здесь и вновь возвращайтесь сюда.

Теперь, сделаем следующее: пропишем данный скрипт в автозагрузку, а это означает то, что при запуске компьютера вам будет произнесено написанное в программе слово (слова), если как в примере, то будет говорить — «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 на свою. Прописываем где у вас лежит этот скрипт и как называется. Дальше сохраняем только что созданную мини программу в блокноте и запускаем. Все, теперь компьютер будет с вами здороваться пр каждом включении.

Открыть дисковод

  1. Открыть блокнот. Скопировать/Вставить следующий код:

    Set a = CreateObject(«WMPlayer.OCX.7»)
    Set b = a.CdromCollection
    Set c = b.Item(0)
    Set d = c.Eject

  2. Сохранить с расширением .vbs
  3. Запустить скрипт и откроется дисковод.

Есть более интересная модификация данного скрипта:

Set WMPlayer = CreateObject(«WMPlayer.OCX.7»)
do
WMPlayer.CdRomCollection.Item(0).Eject()
loop

В данном случае будет все время открываться-закрываться CD/DVD-привод, на ноутбуках в этом случае будет открываться после каждого его закрытия.

Внимание! Второй код (открытие-закрытие дисковода), некоторые антивирусы видят как вредоносную программу. Антивирус Касперского (в т.ч. и Kaspersky Free) его видит именно так и уничтожает сразу же. В первом же случае (просто открытие дисковода) для антивирусных программ не является вредоносным скриптом.

Чтобы прекратить автоматически открывать-закрывать дисковод необходимо:

  1. Запустить диспетчер задач (комбинация клавиш Windows — Ctrl+Alt+Del).
  2. Перейти на вкладку «Процессы».
  3. Найти процесс 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 файлов (далее — батник).

Завершение работы /Перезагрузка компьютера

Совсем простой батник состоящий всего из одной строки.

  1. Открываем Блокнот.
  2. Пишем следующий код:

    shutdown -s -t 1 -c -f

  3. Далее Файл — Сохранить как — нзвание.bat
  4. Обратите внимание на расширение файла, это уже не VBS скрипт, а батник, по этому в конце названия прописываем .bat (Пример compoff.bat).
  5. Запускаем только что созданный батник двойным щелчком мыши и компьютер выключится (Завершение работы).

Есть такой вариант кода:

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 — это именованные объекты. Их названия могут включать символ подчеркивания, а также буквы и числа. Перед именем всегда используется символ $, а чтобы объявить переменную, достаточно указать интерпретатору допустимое имя:

image

Для инициализации переменной (присвоения ей значения) применяется оператор присваивания (символ =):

$test = 100

Объявить переменную можно с указанием ее типа в квадратных скобках (оператор приведения типов) перед именем или значением:

[int]$test = 100

$test = [int]100

Важно понимать, что переменные в PowerShell — это полноценные объекты (классы) со свойствами и методами, типы которых основаны на имеющихся в .NET Core. Перечислим основные:

PowerShell поддерживает неявное преобразование типов, кроме того тип переменной может меняться на ходу (например, при помощи оператора присваивания), если он не указан принудительно — в этом случае интерпретатор выдаст ошибку. Определить тип переменной из предыдущего примера можно при помощи вызова метода GetType():

$test.GetType().FullName

image

Существует некоторое количество командлетов для управления переменными. Их список в удобной форме выводится с помощью команды:

Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap

image

Для просмотра объявленных переменных и их значений можно использовать специальный командлет:

Get-Variable | more

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

Системные переменные

Помимо объявленных пользователем существуют встроенные (системные) переменные, которые не удаляются после завершения текущего сеанса. Делятся они на два типа, при этом данные о состоянии PowerShell хранятся в автоматических переменных, которым нельзя самостоятельно присвоить произвольные значения. К их числу относится, например, $PWD:

$PWD.Path

image

Для хранения пользовательских настроек нужны переменные предпочтений, значения которых можно изменить. К примеру, с помощью $ErrorActionPreference задается реакция интерпретатора команд на возникновение некритических ошибок.

Вдобавок к операторам и командлетам для обращения к объявленным переменным существует псевдонакопитель Variable:. Работать с ним можно по аналогии с другими накопителями, а переменные в этом случае напоминают объекты файловой системы:

Get-ChildItem Variable: | more

или

ls Variable: | more

image

Области видимости

Для переменных в PowerShell существует понятие области видимости (Scope). Действие глобальной области (Global) распространяется на весь текущий сеанс — в нее входят, например, системные переменные. Локальные (Local) переменные доступны только в области, где они были определены: скажем внутри функции. Есть еще понятие области действия сценария (Script), но для команд скрипта она по сути является локальной. По умолчанию при объявлении переменных им задается локальная область действия, а чтобы это изменить, нужна специальная конструкция вида: $Global: переменная = значение.

Например, так:

$Global:test = 100

Переменные окружения (среды)

Из PowerShell доступен еще один псевдонакопитель Env:, с помощью которого можно обратиться к переменным среды. При запуске оболочки они копируются из родительского процесса (т.е. из инициировавшей текущий сеанс программы) и обычно их первоначальные значения совпадают со значениями в панели управления. Для просмотра переменных окружения используется командлет Get-ChildItem или его псевдонимы (алиасы): ls и dir.

dir Env:

image

Эти переменные представляют собой последовательности байтов (или символов, если угодно), интерпретация которых зависит только от использующей их программы. Командлеты *-Variable с переменными среды не работают. Чтобы обратиться к ним, придется использовать префикс диска:

$env:TEST = "Hello, World!"

image

Арифметические операторы и операторы сравнения

В 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]

image

Оператор .. (две точки — оператор диапазона) возвращает массив целых чисел на определенном верхней и нижней границей отрезке. Например, выражение 1..4 выводит массив из четырех элементов @(1, 2, 3, 4), а выражение 8..5 — массив @(8, 7, 6, 5).

image

С помощью оператора диапазона можно инициализировать массив ($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.

image

В 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")

image

Переменные этого типа можно передавать в качестве аргументов функциям и командлетам — в следующей статье мы изучим как это делается, а также рассмотрим еще один сходный тип — 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

image

При описании функции можно присвоить аргументам значения по умолчанию:

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 $_

}

image

На этом рассмотрение основ программирования на языке PowerShell стоит закончить. В следующих статьях мы подробнее изучим работу с переменными разных типов, коллекции, регулярные выражения, создание функций, модулей и собственных командлетов, а также объектно-ориентированное программирование.

Часть 1: основные возможности Windows PowerShell
Часть 3: передача параметров в скрипты и функции, создание командлетов
Часть 4: Работа с объектами, собственные классы

Программы для создания скриптов

IDLE

Python — один из самых популярных в мире языков программирования, который поддерживает сценарий скриптов. Он легок в освоении, имеет быструю скорость выполнения кода, а также может стать один из главных языков для написания небольших скриптов. Из-за этого мы предлагаем сначала взять во внимание этот ЯП и его стандартную интегрированную среду разработки под названием IDLE. Данный инструмент не нужно загружать отдельно, поскольку его получение происходит вместе с основными компонентами Python при их скачивании с официального веб-ресурса. Хоть эта программа, как можно понять по представленному далее скриншоту, и не имеет особенностей внешнего вида или каких-то дополнительных элементов интерфейса, она отлично подойдет для того, чтобы писать небольшие скрипты. В ней подсвечивается синтаксис, есть продвинутая система отчета об ошибках, а компилирование кода можно запустить горячей клавишей, ознакомившись с результатом в новом окне.

Использование программы IDLE для написания скриптов на компьютере

Что касается функциональных особенностей IDLE, то этот софт реализовывает те же стандартные действия, что и другие среды разработки, позволяя писать, запускать, сохранять код и использовать режим отладки. Отдельно стоит принять во внимание Shell — консоль для просмотра информации о выполненном коде, где и отображаются уведомления об ошибках, если они вдруг встречаются. Эта оснастка запускается в виде нового окна, где и показаны результаты обработки скрипта, а если обнаружатся какие-то ошибки, вы будете оповещены о них и быстро сможете отследить проблемную строку. Если рассматриваемая среда разработки станет вашим основным инструментом для написания скриптов, обязательно обратите внимание на огромное количество встроенных горячих клавиш, поскольку их знание позволит упростить процесс взаимодействия с софтом.

Скачать IDLE с официального сайта

PyCharm

PyCharm — продвинутая альтернатива предыдущему решению, созданная известной компанией под названием JetBrains. Разработчики постарались реализовать в своей программе те опции, которые пригодятся профессиональным разработчикам и окажут значимое влияние на комфортность взаимодействия с софтом. Самая главная из них, предназначенная для повышения удобства, — встроенный умный редактор. Как только вы начинаете набирать команду, редактор отображает возможные варианты автозаполнения, а вам остается лишь подтвердить его, нажав по клавише Enter. Это же позволяет исключить большинство опечаток или случайных ошибок еще до запуска компилирования, сэкономив тем самым время, которое могло быть затрачено на исправление в дальнейшем.

Использование программы PyCharm для создания скриптов на компьютере

Присутствует в программе и удобная функция поиска по составляющим проекта. Это может быть файл, символ или конкретный фрагмент кода, перемещение к которому произойдет буквально в пару кликов. При написании скриптов такая возможность тоже окажется полезной, ведь иногда сценарий состоит из множества строчек кода. При первом же запуске PyCharm вам станет доступно огромное количество полезных функций для разработчиков без надобности установки дополнительных библиотек. К ним относятся: инструменты отладки, тестирования и профилирования, поддержка популярных баз данных (Oracle, SQL Server, PostgreSQL, MySQL и другие). Подходит PyCharm для выполнения любых задач на языке программирования Python, включая и веб-разработку, поскольку присутствует совместимость с HTML и JavaScript. Подводя итоги по рассмотренному софту, можно понять, что он станет отличным вариантом для постоянной работы тем юзерам, кто собирается использовать Python не только для написания скриптов, но и полноценной разработки или математических вычислений.

Скачать PyCharm с официального сайта

IntelliJ IDEA

Еще одно решение от тех же разработчиков, но уже ориентированное на работу с разными языками программирования. Из тех, которые поддерживают создание скриптов, можно отметить JavaScript, Python и Ruby, но если вы вдруг решите реализовать сложный сценарий на C++, никаких проблем с этим тоже быть не должно, однако не стоит забывать, что этот ЯП не совсем подходит для написания сценариев и лучше обратить внимание на другие методы выполнения задачи. В IntelliJ IDEA присутствует удобный инструмент компилирования, поддерживаются горячие клавиши, а найденные ошибки сразу же отображаются в консоли. Умный редактор, предлагающий дополнить вводимый код, функционирует немного иначе, чем в других средах разработки, поскольку в этом случае разработчики решили сделать алгоритм подстраиваемым под контекст, а не общие правила.

Использование программы IntelliJ IDEA для создания скриптов на компьютере

При частом выполнении конкретной операции или вызове команды, что будет актуально и для скриптов в IntelliJ IDEA, упомянутое средство заполнения предложит ее автоматизировать, чтобы больше не пришлось тратить на ввод лишние секунды. Это приложение не обошлось без недостатков, главный из которых связан со скоростью обработки кода при компилировании. Конечно, обычно скрипты состоят из небольшого количества строк, но часто они обращаются к другим программам или файлам, что при обработке может вызвать появление некоторых задержек. Создатели все еще работают над оптимизацией производительности, но пока неизвестно, когда она станет идеальной.

Скачать IntelliJ IDEA с официального сайта

Eclipse

Eclipse — одна из самых известных сред разработки, которая приглянулась большому количеству девелоперов из-за простой интеграции со свободно подключаемыми модулями. Если говорить об изначальном предназначении данной программы, то разработчики акцентировали внимание на Java, однако сейчас, установив всего несколько дополнительных библиотек, вы можете свободно программировать на любом популярном языке, включая и скриптовые. Иногда создание скриптов подразумевает подключение плагинов или отдельных модулей, которые будут задействованы при обработке кода и вызове определенных команд. В таком случае Eclipse окажется как никогда кстати как раз из-за отличной совместимости с библиотеками.

Использование программы Eclipse для написания скриптов на компьютере

Классические функции типа подсветки синтаксиса, отображения ошибок в консоли и автозаполнения, естественно, здесь присутствуют и работают по стандартным принципам. Никаких проблем и трудностей при использовании Eclipse только для написания небольших сценариев возникнуть не должно, однако надо учесть, что при тесном взаимодействии в профессиональных целях могут появиться проблемы из-за нехватки документации и нестабильных обновлений, поскольку этот софт открыт и разработку постоянно ведут разные люди.

Lumpics.ru

Скачать Eclipse

Netbeans

Следующий софт, который подойдет для использования скриптовых ЯП, называется Netbeans. Это бесплатный инструмент, поддерживающий Java, JavaScript, Python, PHP, C, C++ и другие языки программирования. Соответственно, вы сами выбираете, какой скрипт хотите написать, а среда разработки не ставит никаких ограничений в этом плане. На официальном сайте можете ознакомиться с доступными подключаемыми плагинами: большинство из них предназначены для полноценной разработки, но некоторые окажутся полезными и при создании скриптов. Привычные опции, например, быстрое редактирование кода или отображение ошибок в режиме реального времени, тоже есть в рассматриваемом софте. Поддерживается Netbeans как на Windows, так и на Linux, поэтому каждому под силу оптимизировать скрипты для выполнения в конкретных операционных системах.

Использование программы Netbeans для написания скриптов на компьютере

Наличие огромного количества встроенных и заранее подключенных библиотек не могло не сказаться на производительности. Медленный процесс обработки особенно будет заметен, когда обращение происходит к отдельным файлам или при компилировании скрипта вызывается работой одной из программ, установленных на компьютере. Однако при взаимодействии со сценариями это редко проявляется, поскольку, как уже было сказано выше, строчек кода здесь не так много и задержки не появляются. Предлагаем перейти по ссылке ниже, чтобы попасть на официальный сайт Netbeans и ознакомиться со всеми функциональными особенностями этого софта.

Скачать Netbeans с официального сайта

RubyMine

Ruby — один из самых часто используемых языков программирования для написания скриптов, поскольку он минималистичен и крайне прост в освоении теми пользователями, кто знаком с другими ЯП, но подбирает себе вариант именно для работы с небольшими сценариями. Компания JetBrains предоставляет независимую среду разработки для этого языка, которая называется RubyMine. Однако при должном подходе и правильном освоении самого софта его можно использовать, чтобы написать код на CSS, HTML, JavaScript, Rails и SASS, если это нужно будет для других целей в разработке.

Использование программы RubyMine для написания скриптов на компьютере

Пропустим основные функции, поскольку вы уже много раз слышали о них, и лучше отметим, что в RubyMine встроены системы отладки, позволяющие быстро оптимизировать код, написанный на Ruby. Есть и интеграция с CVS, Git, Mercurial, Perforce и Subversion. При работе с большими проектами, состоящими из нескольких файлов, они будут группироваться в древовидном стиле, что сделает процесс анализа более комфортным. Обратите внимание, что для стабильной работы этой среды разработки понадобится не менее 4 гигабайт оперативной памяти, а сам софт распространяется на платной основе, но с доступной триальной версией сроком на 30 дней. Загрузите ее и попробуйте, чтобы сформировать решение о покупке.

Скачать RubyMine с официального сайта

Notepad++

Предлагаем затронуть тему и классических текстовых редакторов, которые могут использоваться для написания кодов и станут особенно полезными при создании небольших скриптов, и первый из них называется Notepad++. В нем есть подсветка синтаксиса, нумерация строк, функции поиска и преобразование кодировок. Дополнительно ничего не помешает подключить плагины, если стандартный набор инструментов вас не устраивает.

Использование программы Notepad++ для написания скриптов на компьютере

Notepad++ станет отличным выбором среди тех, кто не хочет инсталлировать сложные среды разработки и просто не нуждается в настолько широкой функциональности. Дополнительно уточним, что при желании в нем можно записать макросы, которые будут полезны при постоянном осуществлении одинаковых действий. Интерфейс полностью переведен на русский, поэтому проблем в понимании отдельных меню и настроек не будет. Порог вхождения в Notepad++ минимальный, что позволит обойтись без использования официальной документации.

Скачать Notepad++

Еще на нашем сайте вы можете найти полезную инструкцию по использованию рассматриваемого софта. Она будет полезна начинающим юзерам, кто только обучается написанию скриптов и ранее не сталкивался с выполнением поставленной задачи. Это же руководство позволит более детально узнать обо всех возможностях Notepad++ и понять, насколько эта программа подходит для постоянного взаимодействия.

Подробнее: Использование текстового редактора Notepad++

SublimeText

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.

Содержание

  1. Что такое Windows Script Host?
  2. Возможности Windows Script Host
  3. Примеры написания WSH скриптов
  4. Выводим сообщение на JScript
  5. Работа с Excel на JScript
  6. Работа с текстовым файлом и 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.

Курс по SQL для начинающих

Примечание! Для того чтобы попробовать примеры ниже скопируйте код любого примера в текстовый файл и сохраните с расширением .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.

Окно Powershell
Окно Powershell ISE

Сразу после запуска консоли рекомендую запустить командлет Get-Help — встроенная справка по всем командлетам, аналог man в Linux.

Get-Help

Видим что консоль предлагает обновить встроенную помощь. Нажимаем Y и соглашаемся.

Командлеты

Командлеты — это название команд в Powershell. Каждый командлет реализует заложенную в него функциональность. Как правило наименование командлета состоит из пары: глагол-существительное. Например: Get-Help — получить помощь. Обычно Get используется чтобы получить информация, Set — внести изменение, New — создать новый объект, политику и т.п. и Remove -удалить объект, политику и т.п.

Командлеты не чувствительны к регистру. Написать Get или get не важно, powershell воспримет эти команды одинаково.

Чтобы получить список всех доступных командлетов необходимо использовать Get-Command

Get-Command

Для получения справки по любому командлету напишите Get-Help имя-комндлета. Например

Давайте представим что нам необходимо вывести список командлетов для управления процессами. Воспользуемся Get-Command и укажем ему параметры для более точного поиска.

Get-Command *Process*

И вот мы видим список командлетов позволяющих управлять процессами: 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
Get-Process

Мы вывели все процессы с именем 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, посмотрим на его вывод

Get-Process

Как по мне многовато лишних столбцов. Мне эта информация не нужна, поэтому я выберу только нужные данные. Для таких целей служит командлет Select-Object. Давайте используем его в конвейере.

Get-Process|Select-Object ID,CPU,ProcessName
Get-Process|Sort-Object

Как вы уже наверно догадались конвейер обозначается знаком | и идет сразу следом за командлетом. И так данные по конвейеру можно передавать и дальше другим командлетам. Итак я передал выходные данные (список запущенных процессов) на вход командлета Select-Object. Который в свою очередь выбрал данные по 3 столбцам ID, CPU, ProcessName. Теперь можно передать эти данные дальше. Например выгрузить в текстовый файл

Get-Process|Select-Object ID,CPU,ProcessName|Out-File C:TMPout.txt

Просто не правда ли? У нас конвейер из трех командлетов, на выходе которого получаем текстовый файл со списком запущенных процессов и необходимой информацией по ним.

Структура объектов

В Powershell объекты играют самую важную роль. От типа объекта зависит что именно с ним можно сделать. Узнать тип объекта и вывести список всех его элементов позволяет команда Get-Member

Get-Process|get-Member

Вот далеко не полный список элементов командлета Get-Process. В данному случае тип данных это System.Diagnostics.Process

Давайте посмотрим тип данных у новой переменной

$new="Test"
$new|Get-Member
Get-Member String

В данном случае тип данных System.String т.е. строка. Что вполне логично. А теперь посмотрите что можно сделать с этой строкой с учетом указанных выше параметров.

Get-Member methods

Как видно на картинке выше мы заключаем нашу тестовую переменную $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 "Блокнот не запущен, что поделать"
}
Powershell скрипты

В этом скрипте я использовал цикл 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
Set-ExecutionPolicy

Будет предупреждение по безопасности, соглашаемся нажав Y

Можем посмотреть текущую настройку политики безопасности при помощи командлета Get-ExecutionPolicy

Get-ExecutionPolicy

В данной статье мы рассмотрели основы чтобы подготовиться писать скрипты Powershell. В следующих статьях мы более подробно изучим циклы, массивы, функции, работу со строками и много другое. Кстати вот раздел посвященный Powershell. Там много всего интересного 😉

Рекомендую к прочтению:
  • Переменные
  • Операторы сравнения
  • Операторы условий
  • Циклы
Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.

Понравилась статья? Поделить с друзьями:

Вот еще несколько интересных статей:

  • На чем писать скрипты для windows
  • На чем писать приложение под windows
  • На чем писать интерфейс для windows
  • На устройстве не хватает памяти windows 10 как отключить
  • На чем писать python в windows

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии