Первые шаги для пауэршельшиков / Хабр

Invoke-command

Командлет Invoke-Command умеет выполнять команды на локальном или удаленном компьютере, используя WinRM. Например, для запуска нашей программы на локальном компьютере используем команду:

Invoke-expression

Командлет Invoke-Expression работает примерно так-же, как и оператор & — берет текстовую строку и выполняет ее в виде команды. Например:

Invoke-Expression -Command ′C:WindowsHello.exe′

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

Invoke-Expression -Command ′C:Program FilesHello.exe′

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

Invoke-Expression -Command ″C:′Program Files′Hello.exe″

Invoke-item

Командлет Invoke-Item предназначен для применения к файлу действия по умолчанию. Так запустить исполняемый файл можно командой:

Invoke-Item -Path ″C:Program FilesHello.exe″

Однако наиболее удобно использовать Invoke-Item для открытия определенного типа файлов. Например так мы откроем текстовый файл:

Invoke-Item -Path ″C:Filestest.txt″

А так все текстовые файлы в папке:

Invoke-Item -Path ″C:Files*.txt″

Start-process

Командлет Start-Process запускает указанный файл в виде процесса, используя метод Start .NET класса Process. Например:

Start-Process -FilePath ′C:Program FilesHello.exe′

По умолчанию процесс выполняется в отдельном окне, которое закрывается по окончании процесса. Изменить такое поведение можно с помощью параметров, так следующая команда запустится в текущем окне:

Start-Process -FilePath ′C:Program FilesHello.exe′ -NoNewWindow -Wait

Также Start-Process позволяет передать в процесс дополнительные аргументы:

Start-Process -FilePath ′C:Program FilesHello.exe′ -ArgumentList ′Hello, world′ -NoNewWindow -Wait

По умолчанию командлет ничего не возвращает, но с помощью параметра -PassThru можно заставить его вернуть объект процесса. Этот объект очень удобно поместить в переменную:

$process = Start-Process -FilePath ′C:Program FilesHello.exe′ -Wait -PassThru

из которой можно затем можно узнать многие полезные вещи, такие как статус:

$process.HasExited

время:

$process.ExitTime

или код выполнения:

$process.ExitCode

Выполнение команды powershell из обычной командной строки

Выполнение команды PowerShell из обычной командной строки

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

powershell -command "команда powershell"

К примеру, можно завершить процесс explorer.exe через powershell, при этом выполнив команду в обычной командной строке:

powershell -command "Stop-Process -Name explorer"

После её выполнения, без всяких дополнительных окон запустится powershell, и завершит указанны процесс проводника.

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

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

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

Запуск powershell из диспетчера задач

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

Выполните следующее:

  1. Запустите Диспетчер задач на ПК.
  2. Войдите в меню «Файл» нажмите на пункт «Запустить новую задачу».
  1. В окне «Создание задачи», в поле «Открыть:» введите «powershell» (без кавычек). Если нужны права администратора, поставьте флажок в пункте «Создать задачу с правами администратора».
  2. Нажмите на кнопку «ОК».

Запуск windows powershell windows 8.1 (windows 8)

В операционных системах Windows 8.1 или Windows 8 открытие PowerShell возможно из окна установленных приложений.

Пройдите шаги:

  1. На начальном экране нажмите на кнопку «Приложения».
  2. В окне «Приложения» найдите папку «Служебные», в которой размешено приложение Windows PowerShell.

Чтобы в Windows 8.1 или Windows 8 запустить PowerShell с правами администратора, необходимо нажать на значок приложения правой кнопкой мыши, а в контекстном меню выбрать пункт «Запустить от имени администратора».

Запуск файла сценария powershell

Чтобы запустить файл сценария в PowerShell, необходимо изменить политику выполнения, выполнив следующие действия:

  1. Откройте поиск и введите PowerShell, щелкните правой кнопкой мыши в верхний результат и выберите Запуск от имени администратора.
  2. Введите следующую команду, чтобы разрешить выполнение скриптов и нажмите клавишу Enter:

    Set-ExecutionPolicy RemoteSigned

  3. Укажите тип А и ещё раз нажмите клавишу Enter.

    Разрешим запуск скриптов PowerShell

  4. Введите следующую команду для запуска скрипта и нажмите клавишу Enter:

    & "C:PATHtoSCRIPTfirst_script.ps1"

    Запуск файла скрипта PowerShell

    В приведенной выше команде обязательно измените PATHtoSCRIPT на расположение вашего скрипта.

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

PowerShell в Windows 10 включает четыре политики выполнения:

  • Restricted – останавливает выполнение скрипта.
  • RemoteSigned – запускает скрипты, созданные на устройстве. Однако, сценарии, созданные на другом компьютере, не будут запускаться, если они не содержат подписи доверенного издателя.
  • AllSigned – все скрипты будут работать до тех пор, пока они подписаны надежным издателем.
  • Unrestricted запускает любой скрипт без каких-либо ограничений.
:/>  Включить диспетчер задач через командную строку - Настройка компьютеров и ноубуков - от выбора "железа" до настройки софта

В приведенных выше шагах мы использовали команду, чтобы разрешить запуск локальных скриптов в Windows 10. Однако, если вы не планируете регулярно выполнять скрипты, можно восстановить настройки по умолчанию, используя те же инструкции, но на Шаге 4, обязательно используйте Set-ExecutionPolicy Restricted команду.

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

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

Как запустить powershell от имени администратора из проводника — 1 способ

Быстрый способ открытия PowerShell: запуск приложения непосредственно из системного инструмента — Проводника Windows.

Необходимо использовать следующий метод:

  1. Запустите Проводник.
  2. В адресную строку Проводника введите «powershell» (без кавычек).
  3. Нажмите на клавишу «Enter».
  1. На экране ПК откроется окно оболочки PowerShell.

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

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 и том, как работать со строками.

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

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

В 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.К сожалению, читабельность полотна обратно пропорциональна его длине. Так что, научившись учиться, давайте обучимся тому, как сделать работу в шелле немного проще.

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

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

:/>  Как зайти в параметры компьютера в windows 10

Оператор &

Если необходимо указать полный путь к исполняемому файлу, то можно воспользоваться оператором & (оператор вызова). Он позволяет выполнить строку текста, указанную в кавычках, как единую команду. Например:

& ′C:Program FilesHello.exe′

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

& ′C:Program FilesHello.exe′  ′Hello, world′

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

& ′C:Program FilesHello.exe′  ′Hello,′, ′ world′

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

$exe = ′C:Program FilesHello.exe′$arg1 = ′Hello′$arg2 = ′world′& $exe $arg1 $arg2

Ну и если аргументов много, то их можно объединить, воспользовавшись такой конструкцией:

$exe = ′C:Program FilesHello.exe′$allargs = @(′Hello,′,′world′)& $exe $allargs

Открытие powershell из папки проводника — 2 способ

Еще один вариант для запуска оболочки PowerShell из текущей папки в Проводнике:

  1. Войдите в Проводник Windows, откройте нужную папку.
  2. Нажмите на меню «Файл», выберите подходящий вариант запуска: «Запустить Windows PowerShell» или «Запустить Windows PowerShell от имени администратора».

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


И так, пару слов по поводу переменных. В 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, 2021 12:00:00 AM

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

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

$x = new-object System.Object

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

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

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

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

dir

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

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

ls Alias:

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

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

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

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

:/>  Как открыть окно командной строки с правами администратора в Windows 7, 8 и 8.1

Get-PSDrive

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

Прямой запуск

Самый простой способ запустить исполняемый файл в PowerShell — это перейти в директорию с файлом и стартовать его напрямую. Для примера возьмем простенькую программку, выводящую приветствие, и выполним ее командой:

Set-Location ″C:Program Files″.Hello.exe

Обратите внимание, что даже находясь в нужном каталоге, требуется указывать относительный путь к исполняемому файлу. Исключение составляют файлы из директорий, перечисленных в переменной окружения (path). Например различные встроенные программы и утилиты (notepad, calc, ping и т.п.), находящиеся в директории WindowsSystem32, можно запускать без указания пути.

Создание скрипта с помощью блокнота

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

  1. Откройте приложение «Блокнот».
  2. Создайте или вставьте сценарий. Например: Write-Host “«Поздравляем! Ваш первый скрипт успешно выполнен»”

    Создание файла скрипта PowerShell с помощью блокнота

    Вышеприведенный скрипт просто выводит на экране фразу «Поздравляем! Ваш первый скрипт успешно выполнен».

  3. Сохраните файл под любым удобным названием, например, first_script.ps1

Создание сценария с помощью интегрированной среды сценариев

Кроме того, консоль PowerShell ISE можно использовать для кодирования сценариев в Windows 10. Интегрированная cреда сценариев является сложным инструментом, но вы можете начать работу с помощью этих шагов:

  1. Откройте системный поиск и введите запрос Windows PowerShell ISE, щелкните правой кнопкой мыши верхний результат, и выберите Запуск от имени администратора или выберите соответствующий параметр в правой колонке.

    Запуск интегрированной среды сценариев

  2. В PowerShell ISE создайте пустой файл .ps1, в котором можно создать или вставить скрипт. Например:

    Write-Host “«Поздравляем! Ваш первый скрипт успешно выполнен»”

    Создаём скрипт для PowerShell через ISE

  3. Откройте меню Файл и нажмите кнопку Сохранить.
  4. Введите название сценария. Например, first_script_ise.ps1
  5. Сохраните скрипт.

Как только Вы выполнили эти шаги с помощью Блокнота или PowerShell ISE, сценарий готов к запуску, но он не будет выполнен. Это происходит потому, что параметры PowerShell по умолчанию всегда настроены на блокирование выполнения любого сценария.

Создание файла сценария powershell

В Windows 10 файлы сценариев PowerShell можно создавать с помощью практически любого текстового редактора или консоли интегрированной среды сценариев (ISE).

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

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

Но как узнать, что же у нас в руках?

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

ps wordpad | Get-Member

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

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

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

конвейера

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

Например, вы хотите отобразить на экране текст, который содержится во всех файлах формата 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/2021   9:57 PM    4247040 wordpad.exe

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

Оставьте комментарий

Adblock
detector