Как научиться писать скрипты для windows

Приди ко мне брате в Консоль! — Админ Долгорукий. Много ярлыков улетело в корзину со времён выхода в свет 2008 Windows. Люди попроще дивились новому синему око...

Приди ко мне брате в Консоль!
— Админ Долгорукий.

Много ярлыков улетело в корзину со времён выхода в свет 2008 Windows. Люди попроще дивились новому синему окошку, которое ребята из Майкрософт зачем-то вставили в свои новые продукты. Люди, которые сидят на блогах и знают программирование начали изучать это окошко.

В итоге к народу начало приходить осознание того, что Майкрософт действительно разработали что-то новое и интересное.
И так, зачем вам это нужно? В основном, программа под названием PowerShell (в дальнейшем PS) предназначена для администраторов и программистов. Она позволяет автоматизировать примерно 99% всех действий в системе. С помощью неё вы можете настраивать удалённые компьютеры, запускать и перезапускать сервисы и производить обслуживание большиства серверных приложений. Как выяснилось, возможности у программы потрясающие.

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

Задача этой статьи проста — показать вам малую долю возможностей PS и дать вам концептуальное понимание предмета. В действительности документации по предмету написано несметное количество, так что я не стремлюсь охватить всё. Я так же ознакомлю вас с набором утилит, которые позволят не вылезать из PS в принципе.

Что представляет собой PS? Это интерпретатор командной строки. Вы вводите необходимые команды, на экране отображается результат их выполнения. Всё просто. Всё было так со времён доса и старого доброго Юникса.

Есть два основных отличия от предшественников, которые качественно выделяют PS среди других интерпретаторов.

  • Очень хорошая интеграция с Microsoft .NET Framework. Это даёт вам возможность вплетать мощные программистские решения в свои команды и скрипты.
  • Все значения, возвращаемые вам в терминал являются объектами, с которыми можно работать как с объектами, а не просто набором строк. Это позволяет вам создавать неимоверно мощные программные скрипты.

Приступая к работе

Если вы используете Windows 7 или 2008 то PS вам уже доступен. Для пользователей других версий Windows — добро пожаловать на сайт Майкрософт.

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

dir

и вы получите список папок в текущем каталоге. Приятным моментом для любителей Юникса
будет тот факт, что команда

ls

работает так же хорошо, как и dir. В PS существует система назначения алиасов на различные команды. В действительности, то что вы сейчас сделали — это выполнили командлет (так в PS называются команды, встроенные в сам PS) Get-ChildItem. Вы можете попробовать просто набрать Get-ChildItem и получить тот же результат, что и в двух предыдущих командах. Для того, чтобы вы быстро ознакомились со списком всех алиасов наберите

ls Alias:

И так, что-то произошло. Вы начали кое-что понимать. Сейчас я буду раскладывать всю магию по кусочкам.

Первое. Командлеты в оригинальной нотации PS имеют следующую систему именования — Глагол-Объект. Это позволяет вам лучше понимать, что можно ожидать в результате выполнения того или иного командлета. Например,

Get-Process # Получить список процессов
Remove-Item # Удалить что-то
Get-Help # получить справку по чему-то
Set-Alias # Создать новый алиас
New-Item # Создать новый объект (Объектом может быть всё что угодно, например, файл)

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

Get-PSDrive

И в ответ вы получаете намного более интересный список дисков в вашей системе, нежели тот, что вы видите в «Моём Компьютере»

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                  16.56         63.44 FileSystem    C:
cert                                   Certificate   
D                    .11         53.92 FileSystem    D:
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

На диске Alias вы можете увидеть список всех алиясов в системе. Виртуальный диск Variable: хранит в себе все переменные, которые вы можете использовать в данной сессии. На диске Env — лежат переменные операционной системы. Диски HKCU и HKLM являются обёрткой для работы с соответствующими ветками реестра.
Давайте углубимся. Набирайте

Set-Location HKLM: # Или, если вы из людей подосёвее, набирайте cd HKLM:

Ну и как вам новый и невероятный способ хождения по реестру всея машины? Вы можете сделать ls по ветке реестра или перейти в нужный «каталог», набрав cd SYSTEM.

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 BCD00000000                    {}
  4   0 HARDWARE                       {}
  1   0 SAM                            {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ ls <<<<  -force
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINESECURITY:St
   ring) [Get-ChildItem], SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.Power
   Shell.Commands.GetChildItemCommand

 35   0 SOFTWARE                       {}
  8   0 SYSTEM                         {}

(Кстати, даже из под администраторского аккаунта есть доступ не ко всем объектам, о чём мой шелл меня уведомляет красными буквами).

Не бойтесь использовать команды New-Item и Remove-Item чтобы создавать и удалять нужные вам ключи в реестре. (И по традиции, я напомню вам, что играться с ключами реестра в администраторском режиме опасно)

Ну, вот вам и небольшой экскурс вглубь. Конечно же, у вас не получится создать ключ реестра так просто. Что-то пойдёт не так, как надо. Ну что же, могу сказать, что PS — это система, которая поощряет обучение в этой системе. Поэтому

Обучение тому, как правильно чему-то научиться в PowerShell

Способность наблюдать и анализировать наблюдения отличает нормального человека от психа. Ребят в Майкрософт психами не назовёшь. Они действительно понаблюдали за пользователями других командных интерпретаторов и выяснили, какая команда чаще всего используется в интерпретаторах. И той командой был великий и могучий man. (Для незнающих — попробуйте сделать — гугл man или наберите в своём баше man man)
В PS есть аналогичная команда, которая звучит как

Get-Help # хотя вы можеше использовать алиас на неё, под названием help

Насколько поразительно отвратительно ребята из Майкрософт делают документацию для пользовательских приложений, настолько хорошо они заботятся о программистах. (Неверующие могут сравнить справку системы Windows XP и 2003)
И так, выбирайте приглянувшийся вам командлет и отправляйте его в help. Если после прочтения общей справки вы ничего не поняли, то попробуйте набрать

get-help New-Item -Examples

Ключ -Examples обычно выдаёт от двух до пяти потрясающих примеров использования выбранной вами команды, с детальным их описанием.
На самом деле, одним только Гет-Хелпом, я в своё время изучил основы PS, перебирая все команды и читая к ним справку.
Если же вы захотели получить справку по какой-то функции, но не знаете, как она называется, а просто предполагаете о её существовании, то просто наберите

get-help files

В ответ на эту команду вы получите список топиков, которые содержат ключевое слово:

PS C:> get-help Files

Name                              Category  Synopsis
----                              --------  --------
FileSystem                        Provider  Provides access to files and dire...
about_profiles                    HelpFile  Describes how to create and use a...

В нашем случая, для того, чтобы научиться работать с реестром, вы можете просто набрать

get-help Registry

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

Маленькие, но очень полезные фишки, которые должны быть в жизни

Товарищ, смирись, ты — в командной строке. Тут безгуёво принципе. Но, если ты познаешь некоторые уловки, тебе здесь станет удобно.

И так, для тех, кто никогда не был в командной строке

  1. Нажатие кнопкок вверх и вниз позволяет вам прокручивать историю команд, и выбирать ранее набранные команды.
  2. Нажатие кнопки вправо, в конце строки, будет посимвольно перенабирать предыдущую команду.

Для тех, кто уже бывал в командных строках

  1. Ctrl+Home — удаляет всё, начиная с текущей позиции курсора до начала строки
  2. Ctrl+End — удаляет с курсора и до конца строки
  3. F7 — показывает окно со списком набранных команд, и позволяет выбрать одну из них.
  4. Для того, чтобы скопировать что-то в буфер, выделите это мышью и нажмите Enter.
  5. Для того, чтобы вставить строку из буфера — просто нажмите правую кнопку мыши.

Это — самые базовые, и необходимые действия, которые вам придётся выучить наизусть. Другое дело, что они помогут вам шустрее работать с шеллом.

Углубляемся в изучение окружения

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

PS C:> ls -filter "*.bat" | Get-Content
REM Dummy file for NTVDM

Команда ls -filter «*.bat» выбирает все файлы с нужным расширением, а команда Get-Content выводит их на экран (на самом деле, исходя из названия, команда просто получает содержимое объекта, а на экран он выводится по факту того, что дальше некуда)
Конвейер может сделать очень много полезного для вас. Например, решить «портянку помощи».

Get-Help Registry | Set-Content reg.txt

И весь файл помощи по реестру сохранён в текстовом файле, который вы теперь можете открыть.

Если вы действительно хотите порадоваться жизни, и понять, что PS способен на многое, то вам придётся применить свой IQ на все 100% и вообразить что-то нереальное.

ps | ls

Выглядит невероятно, а результат даёт потрясающий! Если вы хотите узнать, из какого файла появился процесс, просто пустите его конвейером на get-childitem!
В частности, я сейчас набираю текст в вордпаде:

PS C:> ps wordpad | ls

    Directory: C:Program FilesWindows NTAccessories

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/28/2010   9:57 PM    4247040 wordpad.exe

Вот это меня поразило до глубины души.

Теперь можно переходить к изучению окружения

Как я уже говорил, всё что вы видите на экране не является строками, а является объектами. Например, результат выполнения команды ps возвращает нам список процессов, запущенных в системе.
Но как узнать, что же у нас в руках?
Для этого мы воспользуемся командлетом Get-Member, который откроет нам методы любого класса. Давайте узнаем, что содержится в том же самом процессе, который выдаёт нам команда ps.

ps wordpad | Get-Member

Набирайте, и смотрите на список членов класса, которые вы можете увидеть в классе System.Diagnostics.Process. Тоесть, фактически, командлет ps вернул нам массив объектов типа Process и мы можем попрограммировать их!
Давайте поглумимся над блокнотом.

PS C:> notepad                                                        
PS C:> ps notepad                                                                                                                            Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName  -------  ------    -----      ----- -----   ------     -- -----------       70       4     1148       5376    56     0.30   3900 notepad                                                                                                                                                    PS C:> ps notepad | get-member -type method


   TypeName: System.Diagnostics.Process

Name                      MemberType Definition
----                      ---------- ----------
BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
CancelErrorRead           Method     System.Void CancelErrorRead()
CancelOutputRead          Method     System.Void CancelOutputRead()
Close                     Method     System.Void Close()
CloseMainWindow           Method     bool CloseMainWindow()
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObj...
Dispose                   Method     System.Void Dispose()
Equals                    Method     bool Equals(System.Object obj)
GetHashCode               Method     int GetHashCode()
GetLifetimeService        Method     System.Object GetLifetimeService()
GetType                   Method     type GetType()
InitializeLifetimeService Method     System.Object InitializeLifetimeService()
Kill                      Method     System.Void Kill()
Refresh                   Method     System.Void Refresh()
Start                     Method     bool Start()
ToString                  Method     string ToString()
WaitForExit               Method     bool WaitForExit(int milliseconds), Syst...
WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds),...

Вот это неплохое количество методов, которые мы можем запустить, используя шелл. И так, как же это сделать? Просто.

(ps notepad).WaitForExit()

Если вы возьмёте результат выполнения командлета в скобки, то вы сможете обратиться к нему, как к объекту в вашей программе, прямо из командной строки.
После запуска этого метода шелл завис и ждёт у моря погоды. Нажмите пару раз Enter. Ничего не происходит. Что же, закройте открытый блокнот. Вуаля, вы снова в шелле.
Я думаю, теперь вы должны погулять свою фантазию. Попробуйте, пустите через конвейер в get-member результаты выполнения ls или других командлетов, каких только можете найти.
Если вы увидели, что в свойстве какого-то объекта лежит ещё один объект, не стесняйтесь пускать его на Get-Member

(ps notepad).StartTime | Get-Member

И так далее до бесконечности.

Задача для пытливых умов. Пролетела новость, что рефлектор станет платным. Как сделать рефлектор на чистом PS? Кстати, это не такая уж и трудная задача.

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

Переменные и объекты

И так, пару слов по поводу переменных. В PS они бывают нетипизированными:

$processList = ps

И типизированными

PS C:> [DateTime]$x = "febbrrr"
Cannot convert value "febbrrr" to type "System.DateTime". Error: "The string was
 not recognized as a valid DateTime. There is a unknown word starting at index 0."
At line:1 char:13
+ [DateTime]$x <<<<  = "febbrrr"
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException
PS C:> [DateTime]$x = "02/14/11"
PS C:> $x
Monday, February 14, 2011 12:00:00 AM

И так, у нас появились переменные, и теперь мы можем присваивать им значения. В общем, всё, что вы пускали на конвейер, можно пустить и в переменную. Но, тут PS предоставляет нам одну очень интересную фитчу, которая делает его незаменимым инструментом в руках .NET разработчика.
Помните, я сказал, что в PS всё, что возвращается — это объект? Ну так вот, объект это не простой, а дотнетовый. Любой программист уже обратил внимание на тот факт, что в списке процессов мы работали с объектом из окружения CLR. Что же, мы можем запросто создать такой объект.
Давайте, попробуйте

$x = new-object System.Object

Что-же, переменную мы создали, а толку от неё — как с икспи сервака. Никакого. Давайте пофантазируем и подумаем, что мы действительно можем сделать?

C:> $client = New-Object System.Net.WebClient
C:> $client.DownloadString("http://google.com")

А вот это уже другое дело. Только что мы из подручных средств собрали себе wget на коленке. Как вам такой поворот событий?
Что же, в этот момент можно идти в MSDN и подряд перебирать все классы, смотреть, что в них есть интересного. Всё это позволяет создавать очень гибкие скрипты.

Кстати, о скриптах

PS позволяет выполнять скрипты. Ура! Делает он это с волшебного пендаля. Неура. По умолчанию в PS запрещён запуск скриптов, которые не были подписаны цифровой подписью. Для запуска скрипта вы должны его либо подписать (для этого используйте help about_signing) либо, просто понизить уровень безопасности, и выполнить

set-executionpolicy remotesigned

обычно я делаю второе. Ибо первый вариант требует скачивания многотонных SDK и долгого колдовства. Хотя, напомню о безопасности, и скажу, что второй вариант не канает для супер-сервера-всея-руси.
После выполнения этих действий, вы будете готовы писать свой первый скрипт. Для начала, рекомендую создать для него файл:

New-Item -type file $PROFILE

Переменная $PROFILE содержит в себе адрес файла с вашим профилем в PS. Этот файл будет запускаться в тот момент, когда вы стартуете PS. Плюс заключается в том, что вы можете нашпиговать свой профиль разными мелкими и полезными скриптами, которые помогут вам автоматизировать производство.
Теперь вы можете начать редактирование своего профиля:

vim $PROFILE

(О, кстати, я вам не сказал, но в PS, на мой взгляд, лучше всего смотрится текстовый редактор vim. Возможно кто-то назовёт меня настоящим извращенцем, но на самом деле, я уже не раз пытался использовать что-то другое, но всегда возвращался к виму. Попробуйте и вы. Его не просто изучить с нуля, но если вы поймёте основы, то сможете очень быстро и удобно редактировать тексты.)
Ладно, теперь повторим эту команду без того, чтобы умничать:

notepad $PROFILE

Ну, вот, например, то, что лежит у меня в профиле

$webClient =  New-Object System.Net.WebClient
$cred = New-Object System.Net.NetworkCredential("login", "Pass")
$webClient.Proxy = New-Object System.Net.WebProxy("www.proxy.adrress", $true, $null, $cred)

Так как мы используем прокси сервер, а вэб клиент является моим любимым инструментом для работы, то я уже заготовил для себя переменную с этим клиентом, чтобы иметь возможность безболезненно подключаться к интернету и не отягощать себя вводом пароля.
Что ещё можно запихнуть в профиль?
Всё что угодно. Настройки цвета окна, ваши любимые функции и алиасы. Алиасы на ваши излюбленные программы и скрипты автоматизации…

На самом деле, я уже написал достаточно много. Вы увидели для себя кое-что новое. Я прекрасно знаю, что уровень этой статьи — для начинающих, но и продвинутые админы найдут для себя несколько интересных моментов. Моей задачей было предоставить вам возможность получить общее представление о том, что вы можете сделать.
Что же, вот, напоследок, вам задачи, над которыми можно поломать голову и решить интересные проблемы:
Написать скрипт, который сортирует изображения по папкам, исходя из их размера (для получения размера файла можно использовать дотнет объекты или ком объекты, предоставляемые эксплорером)
Для выполнения этого, вам уж точно понадобиться хорошо изучить Where-Object или Foreach-Object.

Написать простой NMAP
Что будет, если запустить команду Пинг в цикле? А теперь, возьмите выход от этой команды и пропарсите его как строку. Вам однозначно придётся прочитать мануал по -le -ge и том, как работать со строками.

Написать парсер для башорга.
Чтобы, после логина в систему, вам на выбор выдавалась цитата из лучших за последние пять лет. Тут можно использовать регэкспы, с которыми PS очень хорошо дружит.

Поиграться с переменной $host и сделать из синего экрана Матрицу!

Что ещё можно делать? Матёрые COM программисты найдут для себя отличный способ повеселиться, когда обнаружат, что new-object имеет ключ -comObject. Фактически, это открывает вам ворота к полному управлению практически любой функцией локального и удалённого компьютера.

Ещё хочу заметить, что последние версии программного обеспечения от Microsoft поддерживают работу в PowerShell. Например, есть SQL PowerShell, который поставляется с 2008 сиквелом и позволяет сделать ls по записям в любой таблице. Это даёт ещё больший простор для фантазий.

Так же, хочу заметить, что комьюнити по разработке на PS очень сильно растёт и ширится. В частности, вы можете найти скрипты, готовые для чего угодно — например, вы можете нагуглить себе способ управления ITunes через PowerShell или способ использования Google Desktop Search в PS.

Что же, мой неинтересующийся друг, надеюсь, я дал тебе что-то интересное, и ты теперь возьмёшься за покорение интерпретатора, который действительно поможет тебе упростить твою нелёгкую программерскую жизнь и даст тебе возможность автоматизировать больше и быстрее. Очень приятно, что ты прочитал мою статью. Спасибо большое, я могу продолжать конкретно описывать определённые области, если вдруг тебе станет очень интересно.

написать скрипт программу в блокнотеС этой статьей вы не научитесь программировать и даже не напишите как таковую программу, но найдете здесь отличные 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 или сделать восстановление системы.

Основы скриптов на 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 для начинающих мы посмотрим, как писать скрипты, которые помогают оптимизировать управление Windows-окружением.

PowerShell — это объектно-ориентированный программный движок и скриптовый язык с интерфейсом командной строки, предоставляющий широкие возможности для конфигурирования операционных систем семейства MS Windows. Он предлагает как чисто консольный интерфейс, так и полноценную среду разработки PowerShell ISE (Integrated Scripting Environment, встроенное скриптовое окружение) для скриптов.

Для запуска интерфейса командной строки введите powershell в меню «Выполнить» (WinKey + R). PowerShell ISE запускается с помощью команды «PowerShell ISE» в том же меню. ISE более предпочтительно, так как предоставляет более широкие возможности разработчику благодаря подсветке синтаксиса, функции автозаполнения кода и другим особенностям, присущим многим «большим» IDE.

Изображение Windows Power Shell ISE

Среда разработки Windows PowerShell ISE

Написание и запуск скриптов

Скрипты сохраняются в виде файлов с расширением .ps1. Несмотря на то, что PowerShell уже давно является нативной частью ОС Windows, вы не сможете запустить его скрипты простым двойным щелчком. Для этого надо кликнуть правой кнопкой по скрипту и выбрать «Запустить в PowerShell».

Также существуют системные политики, ограничивающие выполнение скриптов. Можно проверить текущие параметры политики, введя команду Get-ExecutionPolicy. Результатом будет одно из следующих значений:

  • Restricted — выполнение скриптов запрещено. Стандартная конфигурация;
  • AllSigned — можно запускать скрипты, подписанные доверенным разработчиком; перед запуском скрипта PowerShell запросит у вас подтверждение;
  • RemoteSigned — можно запускать собственные скрипты или те, что подписаны доверенным разработчиком;
  • Unrestricted — можно запускать любые скрипты.

Для начала работы необходимо изменить настройку политики запуска на RemoteSigned, используя команду Set-ExecutionPolicy:

Команда Set-ExecutionPolicy в PowerShell

После выполнения команды можно будет запускать свои скрипты

Командлеты

Командлеты — это команды с предопределённой функцией, подобные условным операторам в языках программирования. У них есть несколько ключевых особенностей:

  • существуют системные, пользовательские и опциональные командлеты;
  • результатом выполнения командлета будет объект или массив объектов;
  • командлеты могут обрабатывать данные и передавать их другим командлетам с помощью конвейеров;
  • командлеты нечувствительны к регистру, так что нет никакой разницы между Get-ADUser, get-aduser и gEt-AdUsEr;
  • в качестве разделителя используется символ ; .

Каждый командлет содержит в себе глагол и существительное, разделяемые дефисом. Например:

  • Get-Process — отобразить текущие процессы, запущенные на компьютере;
  • Get-Service — отобразить список служб и их статус;
  • Get-Content — отобразить содержимое указанного файла, например Get-Content C:WindowsSystem32driversetchosts.

При необходимости список всех доступных командлетов можно вывести с помощью Get-Help-Category. Запомните эту команду — она крайне важна для тех, кто изучает PowerShell с нуля, так как помогает быстрее начать ориентироваться в его возможностях.

Команда Get-Help-Category в PowerShell

Результат выполнения команды Get-Help-Category

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

Параметры

У каждого командлета есть несколько параметров, определяющих его работу. PowerShell ISE автоматически предлагает все доступные параметры с отображением их типа. Например, Get-Service-NameW* выводит список служб, у которых имя начинается с W. Если вы забыли, какие параметры у введённого командлета, воспользуйтесь Get-Member.

Например, Get-Process | Get-Member:

Команда Get-Member в PowerShell

Список параметров командлета Get-Process

Если вы не нашли того, что нужно, или не уверены в том, как правильно задаются параметры, можно даже запросить примеры с помощью параметра -Examples. Встроенное руководство по PowerShell покажет, для чего используются разные параметры:

Команда -Examples

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

Некоторые командлеты также могут вызываться с помощью алиасов. Например, вместо Get-Help можно просто написать Help — эта команда также вызовет встроенное руководство по PowerShell.

При написании больших скриптов или коллективной разработке можно пользоваться комментариями. Каждый комментарий начинается с символа #, а блок комментариев ограничивается комбинациями символов <# и #> в начале и в конце соответственно.

Конвейер

PowerShell позволяет осуществлять обмен данными между командлетами с помощью конвейера. Например:

  • GetService | SortObject -property Status — сортировка запущенных служб по статусу;
  • “Hello World!” | Out-File C:pstest.txt — запись текста в файл.

Можно использовать несколько конвейеров. Например, следующий скрипт выводит список имён всех служб за исключением остановленных:

Get-Service | WHERE {$_.status -eq “Running”} | SELECT displayname

Заключение

Это руководство для тех, кто изучает PowerShell с нуля, поэтому здесь раскрыты только базовые понятия и приёмы. После его прочтения у вас должно появиться представление о том, что собой представляет этот инструмент. Также мы рассмотрели варианты изменения политики выполнения скриптов, что такое командлет, как они обмениваются данными с помощью конвейера и как получить свойства нужного объекта. Помните, что в случае затруднений можно воспользоваться командлетом Get-Help — это одна из самых важных команд для начинающих изучать PowerShell.

Если пользуетесь не только Windows, но и Linux, посмотрите статью про команды терминала Linux для начинающих. В ней рассказывается про работу с процессами и файлами, навигацию, каналы, xargs, awk и grep.

Перевод статьи «Windows PowerShell Scripting Tutorial for Beginners»

Человек на черном фоне
Всем нам, приходилось сталкиваться с рутинными задачами изо дня в день на работе, и не только.

Contents

  • Например:
  • Давайте разберем первый пример:
  • Второй пример:
  • Третий пример:
  • Создание bat Файла своими руками
    • Основные команды, которые используются для написания батников:

Например:

  1. Необходимо раз в месяц удалять все файлы из папки обмен.
  2. «Добросовестные» пользователи не выключают компьютеры, и уходят домой, а вам потом по голове дают за то, что компьютер работал, и жрал электроэнергию.
  3. У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.

Можно еще привести множество примеров обыкновенных задач, на которые лучше не тратить свое время, а автоматизировать процесс. Сегодня хочу рассказать, как пишутся элементарные bat скрипты.

Давайте разберем первый пример:

Необходимо раз в месяц удалять все файлы из папки обмен.

  1. Открываем WordPad, блокнот не подойдет, он не умеет сохранять в кодировке 866.
  2. Пишем:

del /q “c:обмен”
pause
Команда del- удаляет файлы, ключ q говорит, удалять файлы без подтверждения пользователя, дальше идет путь до папки обмен, команда pause – это для вашего удобства, что бы окно не закрылось автоматически после выполнения работы скрипта, можно её не писать.

  1. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, del_obmen.bat, жмем Ок, запускаем и наслаждаемся.

Второй пример:

«Добросовестные» пользователи не выключают компьютеры, и уходят домой, а вам потом по голове дают за то, что компьютер работал, и жрал электроэнергию.

  1. Открываем WordPad.
  2. Пишем:

SHUTDOWN /s
Пояснения я думаю ни к чему.
3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, shutdown.bat, жмем Ок, запускаем и наслаждаемся.
4. Дальше открываем панель управления => планировщик заданий, создаем задание в 20 00, думаю понятно для чего.

Третий пример:

У вас 20 человек в кабинете, принтер один и всем нужно выводить на него печать. Можно написать батник закинуть его в обмен зайти в кабинет и всем пользователям сказать зайдите туда-туда, нажмите то-то, и можете печатать, а если у Вас есть active directory, то можно распространить с помощью неё.

  1. Открываем WordPad.
  2. Пишем:

start \192.168.0.37SamsungU
Start – запуск, \192.168.0.37 – ip адрес, SamsungU – имя принтера.

Если у вас ip адреса раздаются по DHCP, то лучше ввести не ip адрес, а имя компьютера. 

3. Дальше выбираем Файл => Сохранить как => в строке Имя файла пишем допустим, print.bat, жмем Ок, запускаем и наслаждаемся.

 

Основные команды, которые используются для написания батников:

ASSOC — Отображает или модифицирует связи расширений файлов
AT — Планирует команды и программы для выполнения на компьютере.
ATTRIB — Отображает или изменяет атрибуты файла.
BREAK — Устанавливает или отменяет проверку комбинации [Ctrl+C].
CACLS — Отображает или модифицирует списки управления доступом (ACLs) для файлов.
CALL — Вызывает один *.BAT-файл из другого.
CD — Отображает имя или изменяет имя текущей директории.
CHCP — Отображает или устанавливает номер активной кодовой страницы.
CHDIR — Отображает имя или изменяет имя текущей директории.
CHKDSK — Проверяет диск и отображает отчет о состоянии.
CLS — Очищает экран.
CMD — Стартует новый экземпляр интерпретатора команд Windows NT.
COLOR — Устанавливает цвета по умолчанию для переднего и заднего плана консоли.
COMMAND — Стартует новую копию интерпретатора команд Windows.
COMP — Сравнивает содержимое двух файлов или установки файлов.
COMPACT — Отображает или видоизменяет сжатие файлов на патрициях Windows NT(NTFS).
CONVERT — Конвертирует FAT томов к формату файловой системы Windows NT(NTFS). Вы не можете конвертировать текущий диск.
COPY — Копирует один или больше файлов на другое место.
CTTY — Изменяет терминальное устройство, используемое для управления вашей системой.
DATE — Отображает или устанавливает дату.
DEL — Удаляет один или более файлов.
DEBUG — Выполняет отладку, тестирование программ и редактирование инструментальных средств.
DIR — Отображает список файлов и поддиректорий в директории.
DISKCOMP — Сравнивает содержимое двух дискет.
DISKCOPY — Копирует содержимое одной дискеты на другую.
DOSKEY — Редактирует командные строки, восстанавливает команды Windows и создает макрос.
ECHO — Отображает сообщения, или включает/выключает вывод команд.
EMM386 — Включает/выключает поддержку расширенной памяти EMM386.
ENDLOCAL — Заканчивает локализацию изменений окружающей среды в *.BAT-файле.
ERASE — Удаляет один или более файлов.
EXIT — Прекращает выполнение программы «CMD.EXE» (интерпретатор команд).
EXTRACT — Средство извлечения информации из CAB — файлов.
FC — Сравнивает два файла или установки файлов, и отображает различие между ними.
FIND — Ищет текстовую строку в файле или файлах.
FINDSTR — Поиск строк в файлах.
FOR — Выполняет указанную команду для каждого файла в наборе файлов.
FORMAT — Форматирует диск для использования с Windows.
FTYPE — Отображает или модифицирует типы файлов, используемых в связях расширений.
GOTO — Направляет интерпретатор команд Windows NT к помеченной строке в *.BAT-файле.
GRAFTABL — Способность Windows отображать символы псевдографики, вставленные в графическом режиме.
HELP — Обеспечивает информацию Help для команд Windows.
IF — Выполняет обработку условия в *.BAT-файле.
KEYB — Конфигурирует клавиатуру для заданного языка.
LABEL — Создает, изменяет, или удаляет метку тома на диске.
LOADHIGH(LH) — Загружает программу в верхние адреса памяти.
MD — Создает директорию.
MEM — Отображает величину используемой и свободной памяти в вашей системе.
MKDIR — Создает директорию.
MODE — Конфигурирует системное устройство.
MORE — Отображает вывод одного экрана за раз.
MOVE — Перемещает один или более файлов из одной директории в другую на том же диске.
NETSTAT — Отображает статистики протоколов и текущих сетевых соединений TCP/IP.
NLSFUNC — Загружает информацию, специфическую для страны.
PATH — Отображает или устанавливает путь поиска для выполняемых файлов.
PAUSE — Приостанавливает обработку *.BAT-файла и отображает сообщение.
POPD — Восстанавливает предыдущее значение текущей директории, сохраненной по PUSHD.
PRINT — Печатает текстовый файл.
PROMPT — Изменяет подсказку к командам Windows.
PUSHD — Сохраняет текущую директорию, потом изменяет.
RD — Удаляет директорию.
RECOVER — Восстанавливает читаемую информацию с плохого или дефектного диска.
REM — Записывает комментарии (примечания) в *.BAT-файлы или CONFIG.SYS.
REN — Переименует файл или файлы.
RENAME — Переименует файл или файлы.
REPLACE — Заменяет файлы.
RESTORE — Восстанавливает файлы, которые были архивированы с использованием команды BACKUP.
RMDIR — Удаляет директорию.
SET — Отображает, устанавливает или удаляет переменные среды Windows.
SETLOCAL — Начинает локализацию изменений среды в *.BAT-файле.
SETVER — Устанавливает номер версии MS-DOS, который Windows сообщает программе.
SHIFT — Сдвигает позицию замещаемых параметров в *.BAT-файле.
SMARTDRV — Инсталлирует и конфигурирует утилиту кэширования диска SMART — драйва.
SORT — Сортирует входной поток.
START — Стартует отдельное окно для выполнения указанной программы или команды.
SUBST — Связывает путь с литерой диска.
SYS — Копирует файлы системы MS-DOS и интерпретатор команд на указанный вами диск.
TIME — Отображает или устанавливает системное время.
TITLE — Устанавливает заголовок окна для сеанса «CMD.EXE» .
TREE — Графически отображает структуру директория в драйве или путь.
TYPE — Отображает содержимое текстового файла.
VER — Отображает версию Windows.
VERIFY — Сообщает Windows, проверять ли правильность записи файлов на диск.
VOL — Отображает метку дискового тома и серийный номер.
XCOPY — Копирует файлы и деревья директории.
Также есть очень хороший форум, где куча готовых скриптов.
Командная строка, батникисценарии (bat, cmd) 

Предыдущая

Windowsntvdm.exe загрузка процессора на 100%

Следующая

WindowsОбзор Windows 8

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

Понравилась статья? Поделить с друзьями:
  • Как обнаружить вирус майнер на компьютере windows 10
  • Как научиться переустанавливать windows на компьютере
  • Как нельзя называть файлы в windows
  • Как обнаружить антивирус на компьютере windows
  • Как научить компьютер здороваться голосом windows 10