Out-Null или подавление вывода информации в Windows PowerShell. Out-Null или подавление вывода информации в Windows PowerShell Синтаксис команд в PowerShell

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

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

ISE более предпочтительно, так как предоставляет более широкие возможности разработчику благодаря подсветке синтаксиса, функции автозаполнения кода и другим особенностям, присущим многим «большим» IDE.

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

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

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

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

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

Командлеты

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

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

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

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

При необходимости список всех доступных командлетов можно вывести с помощью Get-Help-Category:

Также можно создавать и свои собственные командлеты.

Параметры

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

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

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

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

Конвейер

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

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

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

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

Заключение

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

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

Создание

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

Get-EventLog -LogName Application -Newest 50 | where TimeWritten -ge (Get-Date).AddHours(-14)

Команда не очень сложная, но в скором времени ее надоест писать. Для сокращения этой работы ее можно выделить в отдельную функцию:

Function Get-DayLog { Get-EventLog -LogName Application -Newest 50 | where TimeWritten -ge (Get-Date).AddHours(-14) }

Любая функция обязательно должна состоять из трех вещей:

  • function - объявляет и говорит что после нее будет название;
  • имя функции - название, по которому мы будем ее вызывать. В нашем случае имя Get-DayLog;
  • скобки - обозначают начало и конец выражения.

После написания функции она вызывается по имени:

Get-DayLog

Учитывая, что нам может потребоваться получить данные не за последние 14 часов и более чем за 50 дней нам может потребуется изменить ее передав параметры.

Именование

Не обязательно использовать имя такого же плана, как принято в Powershell, то есть вместо "Get-DayLog" можно писать "daylog". Такой подход рекомендуем и является распространенной практикой, который поможет отличить запуск сторонней программы от функции.

Функции в Powershell всегда именуются по следующему признаку. Первое слово это глаголы типа:

  • Get - получить;
  • Set - изменить;
  • Install - установить;
  • New - создать.

Второе имя - это существительное, как в случае выше DayLog(дневной лог). У Microsoft есть утвержденный список глаголов, который доступен по ссылке на английском языке. Если вы не будете придерживаться этих правил и захотите добавить свою функцию (командлет или модуль) в один из репозиториев, то он может не пройти модерацию.

Передача параметров

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

Function Get-DayLog ($param1,$param2) { Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2) }

Параметры функции обозначаются в круглые скобки и пишутся после названия функции и до выражения.

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

Get-DayLog -param1 50 -param2 -14

При вызове функции мы передаем два обязательных параметра со значениями. Эти значения, внутри функции, будут доступны под названиями $param1 и $param2. Эти переменные мы передаем в команду получения и фильтрации логов.

Установка значений по умолчанию

В нашей задаче, чаще всего, мы получаем только 50 последних логов и нам не хочется указывать их каждый раз. Если мы не будем указывать этот параметр в существующей функции, то получим ошибку. Что бы этого избежать нужно указать значение по умолчанию. На примере ниже я присвоил $param1 значение 50. Оно будет использоваться только в том случае, если мы не используем этот параметр при вызове:

Function Get-DayLog ($param1=50,$param2) { Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2) } Get-DayLog -param2 -7

Мы должны всегда указывать ключ param2, что добавляет немного работы. Что бы это исправить достаточно поменять их местами:

Function Get-DayLog ($param2,$param1=50) { Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2) } Get-DayLog -7 1 Get-DayLog -7

Как видно на примере, если мы не указываем ключи param1 и param2 важна последовательность, так как именно в такой последовательности они будут присвоены переменным внутри функций.

Возвращение значений

В отличие от других языков, если мы присвоим переменной $result результат функции Get-DayLog, то она будет содержать значения:

$result = Get-DayLog -7 1

Это будет работать до тех пор, пока мы не решим изменить функцию присвоив переменные:

Function Get-DayLog ($param2,$param1=50) { $events = Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2) } $result = Get-DayLog -7 $result $events

Мы не можем получить результат используя переменную $result, так как функция не выводит информацию, а хранит ее в переменной $events. Вызывая $events мы тоже не получаем информацию, так как тут работает понятие "область видимости переменных".

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

Function Get-DayLog ($param2,$param1=50) { $events = Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2) return $events } $result = Get-DayLog -7 $result

Я бы рекомендовал всегда возвращать значения через return, а не использовать вывод используя команды типа Write-Output внутри функции. Использование return останавливает работу функции и возвращает значение, а это значит что его не стоит ставить по середине логики если так не планировалось.

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

Function Get-Salary ($Zarplata) { $nalog = $Zarplata * 0.13 $zarplata_bez_nds = $Zarplata - $nalog return $nalog,$zarplata_bez_nds } Get-Salary -Zarplata 100000

Я вернул оба значения разделив их запятой. По умолчанию всегда возвращается массив. это набор не именованных параметров. Более подробно о них мы уже писали.

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

$result = Get-Salary -Zarplata 100000 # Определяем тип данных $result.GetType() Write-Host "это зарплата" $result Write-Host "это налог" $result

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

Function Get-Salary ($Zarplata) { $nalog = $Zarplata * 0.13 $zarplata_bez_nds = $Zarplata - $nalog return @{"Налог"=$nalog;"Зарплата"=$zarplata_bez_nds;} } Get-Salary -Zarplata 100000

Использование массивов

Передача массивов в виде параметров

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

Функция будет принимать массив с именами компьютеров и возвращать все остановленные сервисы. Я так же объявлю этот тип строгим, для наглядности, хотя и без этого в любом случае сработает:

Function Get-ServiceStopped ($Computers){ $services = Get-Service -ComputerName $Computers | where Status -eq Stopped return $services } Get-ServiceStopped "127.0.0.1","localhost"

Массивы так же работают по индексам, что позволяет передавать больше параметров. Такой способ не релевантный, но может когда-то пригодиться.

Function Get-ServiceStopped ($Computers){ $services = Get-Service -ComputerName $Computers | where Status -eq $Computers[-1] return $services } Get-ServiceStopped "127.0.0.1","localhost","Stopped"

Хэш таблицы

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

Function Get-ServiceStopped ($Params){ $services = Get-Service @Params | where Status -eq Stopped $services = Start-Service $services return $services } Get-ServiceStopped @{Name="WinRM";ComputerName=@("127.0.0.1","localhost")}

Знак @ в команде объявляет, что данные хэш таблицы будут использоваться как параметры команды. Важно, чтобы их имена соответствовали настоящим параметрам.

Условия

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

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

Function Get-SiteResponse { # Начало отсчета $start_time = Get-Date # Выполнение запроса $request = Invoke-WebRequest -Uri "https://сайт" # Фиксирование окончания выполнения $end_time = Get-Date # Высчитываем разницу во времени $result = $end_time - $start_time # Проверка и возвращение результата if ($result.Milliseconds -lt 76) { return "Скорость ответа нормальная " + $result.Milliseconds} else{ return "Сайт отвечает долго " + $result.Milliseconds } } Get-SiteResponse

Switch

Мы уже говорили про в предыдущих статьях. Если коротко, то это более удобные условия. Используя предыдущий пример, но со Switch, это будет выглядеть так:

Function Get-SiteResponse { # Начало отсчета $start_time = Get-Date # Выполнение запроса $request = Invoke-WebRequest -Uri "https://сайт" # Фиксирование окончания выполнения $end_time = Get-Date # Высчитываем разницу во времени $result = $end_time - $start_time # Проверка и возвращение результата switch($result.Milliseconds) { {$PSItem -le 76} { return "Скорость ответа нормальная " + $result.Milliseconds} default { return "Сайт отвечает долго " + $result.Milliseconds } } } Get-SiteResponse

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

Function Install-SQLUpdates { # делаем установку return "Установка обновлений на SQL сервер прошла успешно" } function Install-ADUpdates { # делаем установку return "Установка обновлений на сервер AD прошла успешно" } function Install-FileServerUpdates { # делаем установку return "Установка обновлений на файловый сервер прошла успешно" } function Make-Switch ($computer) { # Проверка имени компьютера $result = switch($computer){ {$computer -like "SQL*"} {Install-SqlUpdates} {$computer -like "AD*"} {Install-ADUpdates} {$computer -like "FileServer*"} {Install-FileServerUpdates} default {"Такого типа компьютеров нет"} } return $result } Make-Switch "AD1"

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

Function Switch-ServiceTest ($on) { if ($on) {Write-Output "Сервис включен"} else {"Сервис выключен"} } Switch-ServiceTest -On Switch-ServiceTest

Передача через конвейер или Pipeline

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

Get-Process -Name *TestProc* | Stop-Process

Если мы захотим использовать подход описанный выше, создав новые команды в виде функций, то конвейер не будет работать:

Function Get-SomeNum { # Генерация числа $num = Get-Random -Minimum 5 -Maximum 10 return $num } function Plus-SomeNum ($num) { Write-Host "Прибавление числа " $num $num += $num return $num } Get-SomeNum Plus-SomeNum 5 Get-SomeNum | Plus-SomeNum

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

Get-Help Stop-Process -Parameter Name

Таких атрибутов всего два:

  • ValueFromPipelineByPropertyName - получение значения из конвейера по имени;
  • ValueFromPipeline - получение через конвейер только значения.

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

Function Get-SomeNum { $num = Get-Random -Minimum 5 -Maximum 10 return $num } function Plus-SomeNum { Param ( $num) process { Write-Host "Прибавление числа " $num $num += $num return $num } } 1..5 | Plus-SomeNum Get-SomeNum | Plus-SomeNum

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

Если бы мы не указали блок Process функция бы вернула только последней результат из массива 1..5:

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

Function Get-SomeNum { $num = Get-Random -Minimum 5 -Maximum 10 $object = @{num=$num} return $object } function Plus-SomeNum { Param ( $num) process { Write-Host "Прибавление числа " $num $num += $num return $num } } Get-SomeNum | Plus-SomeNum @{num=5} | Plus-SomeNum @{bad=5} | Plus-SomeNum

Как уже писалось ValueFromPipelineByPropertyName принимает только именованные параметры и в случае с именем "bad" мы получаем ошибку:

  • Не удается привязать объект ввода к любым параметрам команды, так как команда не принимает входные данные конвейера
  • The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.

Причем передавать именованные параметры через хэш таблицы мы не можем, только через pscustomobject.

Вы можете указывать сразу два атрибута таким образом:

Это позволит использовать и значение с именем, если оно указано либо без него. Это не спасет вас от ситуации, если вы передаете параметр с другим именем:

Передача через конвейер нескольких значений

Для примера рассмотрим ситуацию, где нам нужно передать через конвейер два значения. Если Get-SomeNum будет возвращать массив, то через конвейер у нас будет проходить каждое число по отдельности. Это еще один повод использовать именованные параметры:

Function Get-SomeNum { $number1 = Get-Random -Minimum 5 -Maximum 10 $number2 = Get-Random -Minimum 1 -Maximum 5 $object = @{num1=$number1;num2=$number2} return $object } function Plus-SomeNum { Param ( $num1, $num2) begin {$num1 += $num1 $num2 = $num2 * $num2} process { return @{"Результат сложения"=$num1; "Результат умножения"=$num2} } } Get-SomeNum | Plus-SomeNum

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

Самый простой способ вывести окошко с произвольным тестом через подсистему сценариев Windows – Wscript.

Следующий код выведет обычное текстовое окно с необходимым текстом и кнопкой OK.

$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("Скрипт формирования отчета выполнен")

С помощью различных свойств метода Popup вы можете настроить вид модального окна сообщения. В том числе можно вернуть в скрипт результаты ответа пользователя на вопрос (Да / Нет).

$Output = $wshell.Popup("Скрипт формирования отчета завершен! Хотите вывести его на экран?",0,"Отчет готов",4+32)

Общий синтаксис и параметры метода Popup:

Popup(,,,<Type>) </b></p><p>Параметры:</p><ul><li><Text> — строка, текст сообщения.</li><li><SecondsToWait> — необязательный, число. Количество секунд, по истечении которого окно будет автоматически закрыто.</li><li><Title> — необязательный, строка. Текст заголовка окна сообщения.</li><li><Type> — необязательный, число. Комбинация флагов, определяет тип кнопок и значка. Возможные значения флагов:<ul><li>0 — кнопка ОК.</li><li>1 — кнопки ОК и Отмена.</li><li>2 — кнопки Стоп, Повтор, Пропустить.</li><li>3 — кнопки Да, Нет, Отмена.</li><li>4 — кнопки Да и Нет.</li><li>5 — кнопки Повтор и Отмена.</li><li>16 — значок Stop.</li><li>32 — значок Question.</li><li>48 — значок Exclamation.</li><li>64 — значок Information.</li> </ul></li> </ul><p>Описание: возвращает целое значение, с помощью которого можно узнать, какая кнопка была нажата пользователем. Возможные значения:</p><ul><li>-1 — таймаут.</li><li>1 — кнопка ОК.</li><li>2 — кнопка Отмена.</li><li>3 — кнопка Стоп.</li><li>4 — кнопка Повтор.</li><li>5 — кнопка Пропустить.</li><li>6 — кнопка Да.</li><li>7 — кнопка Нет.</li> </ul><p>Более привлекательные и приятные взгляду всплывающие сообщения (ballons) можно вывести в Windows 7, 8.1 и 10 через API Windows Forms. Следующий PowerShell код выведет всплывающее сообщение рядом с панелью уведомлений Windows 10, которое автоматически исчезнет через 10 секунд.</p><p>Add-Type -AssemblyName System.Windows.Forms<br>$global:balmsg = New-Object System.Windows.Forms.NotifyIcon<br>$path = (Get-Process -id $pid).Path<br>$balmsg.Icon = ::ExtractAssociatedIcon($path)<br>$balmsg.BalloonTipIcon = ::Warning<br>$balmsg.BalloonTipText = "Это текст всплывающего сообщения для <a href="/windows-7/skachat-russkuyu-programmu-na-samsung-besplatnye-draivera-samsung-kies-na/">пользователя Windows</a> 10"<br>$balmsg.BalloonTipTitle = "Внимание $Env:USERNAME"<br>$balmsg.Visible = $true<br>$balmsg.ShowBalloonTip(10000)</p><p><img src='https://i2.wp.com/winitpro.ru/wp-content/uploads/2018/10/vsplyvayushee-uvedomlenie-v-powershell.png' width="100%" loading=lazy></p><p>Кроме того для создания красочных всплывающих сообщений в Windows 10 (PowerShell 5.0+)можно использовать отдельный PowerShell модуль BurntToast из галереи PowerShell.</p><p>Модуль устанавливается из онлайн репозитория с помощью :<br> Install-Module -Name BurntToast</p><p>Теперь, например, в ранее рассматриваемый можно добавить красочное уведомление:</p><p>New-BurntToastNotification -Text "Отключение от <a href="/windows-7/ne-rabotaet-plei-market-na-android-osnovnye-prichiny-kak-reshit/">Wi-Fi сети</a>", "Вы были отключены от Wi-Fi сети, т.к. Вше устройство было подключено к скоростному Ethernet подключению." -AppLogo C:\PS\changenetwork.png</p><p>Итак, теперь вы знаете как вывести уведомление пользователя через PowerShell. Если у пользователя есть динамики, можно даже сыграть ему мелодию:</p><p>::beep(440,500)<br>::beep(440,500)<br>::beep(440,500)<br>::beep(349,350)<br>::beep(523,150)<br>::beep(440,500)<br>::beep(349,350)<br>::beep(523,150)<br>::beep(440,1000)<br>::beep(659,500)<br>::beep(659,500)<br>::beep(659,500)<br>::beep(698,350)<br>::beep(523,150)<br>::beep(415,500)<br>::beep(349,350)<br>::beep(523,150)<br>::beep(440,1000)<br>::beep(880,500)<br>::beep(440,350)<br>::beep(440,150)<br>::beep(880,500)<br>::beep(830,250)<br>::beep(784,250)<br>::beep(740,125)<br>::beep(698,125)<br>::beep(740,250)<br>::beep(455,250)<br>::beep(622,500)<br>::beep(587,250)<br>::beep(554,250)<br>::beep(523,125)<br>::beep(466,125)<br>::beep(523,250)<br>::beep(349,125)<br>::beep(415,500)<br>::beep(349,375)<br>::beep(440,125)<br>::beep(523,500)<br>::beep(440,375)<br>::beep(523,125)<br>::beep(659,1000)<br>::beep(880,500)<br>::beep(440,350)<br>::beep(440,150)<br>::beep(880,500)<br>::beep(830,250)<br>::beep(784,250)<br>::beep(740,125)<br>::beep(698,125)<br>::beep(740,250)<br>::beep(455,250)<br>::beep(622,500)<br>::beep(587,250)<br>::beep(554,250)<br>::beep(523,125)<br>::beep(466,125)<br>::beep(523,250)<br>::beep(349,250)<br>::beep(415,500)<br>::beep(349,375)<br>::beep(523,125)<br>::beep(440,500)<br>::beep(349,375)<br>::beep(261,125)<br>::beep(440,1000)</p> <p><b> Windows PowerShell </b> является мощным средством и может выполнять практически все, что хочет человек на своем компьютере. Но единственная проблема заключается в том, что это инструмент командной строки и не имеет <a href="/security/v-prilozhenii-graficheskii-interfeis-sistemy-proizoshla-oshibka-chto/">графического интерфейса</a>. Тем не менее, это может быть полезно, когда интерфейс на основе графического интерфейса не работает или перестает отвечать. К сожалению, главным является тот факт, что обычному пользователю не хватает знаний об использовании PowerShell в полной мере. Но сегодня мы попытаемся обсудить 10 лучших команд PowerShell, которые могут помочь пользователю сделать больше в Windows 10.</p> <h2>Команды PowerShell, которые помогут пользователю сделать больше<br></h2> <p>Прежде чем мы начнем, необходимо подчеркнуть, что некоторые из этих <i> командлетов </i> могут переключать определенные параметры или конфигурацию на вашем компьютере. <b> Командлет </b> — это сценарий PowerShell, который выполняет одну функцию. Поэтому, чтобы быть в безопасности, сначала создайте точку восстановления системы. Если во время выполнения одного из следующих командлетов что-то пойдет не так, вы всегда сможете восстановить свой компьютер.</p> <p>Мы рассмотрим <i> командлеты </i>, которые могут выполнять следующие действия:</p> <ol><li>Запустите приложение UWP.</li> <li>Получить справку о любом командлете.</li> <li>Получите похожие команды.</li> <li>Найти определенный файл.</li> <li>Прочитайте содержимое файла.</li> <li>Найти информацию обо всех услугах на компьютере.</li> <li>Найти информацию обо всех процессах на компьютере.</li> <li>Установка политики выполнения.</li> <li>Скопируйте файл или каталог.</li> <li>Удалить файл или каталог.</li> </ol><p><b> 1] Запустите приложение UWP </b></p> <p><img src='https://i2.wp.com/techarks.ru/media01/imge_12235.png' width="100%" loading=lazy></p> <p>PowerShell — отличный инструмент, который можно использовать для запуска приложений UWP за считанные секунды. Но главное заключается в правильном выполнении команды. Ты можешь использовать</p><p>Start-Process "ms-settings:" </p><p>Команда просто для запуска приложения <a href="/problems/oshibka-651-pri-podklyuchenii-k-internetu-windows-otklyuchit-funkciyu-avtomaticheskoi/">Windows Настройки</a> UWP. Вы можете узнать больше о других URI для других приложений UWP здесь на microsoft.com.</p> <p><b> 2] Получите справку о любом командлете </b></p> <p><img src='https://i0.wp.com/techarks.ru/media01/imge_12254.png' width="100%" loading=lazy></p> <p>Если вы когда-либо не понимаете, какую команду вы должны использовать для выполнения определенной задачи. Или то, что делает конкретный командлет, вам не нужно беспокоиться. Вы можете просто использовать командлет Get-Help, чтобы сделать это. Вы можете использовать его следующими способами:</p><p>Get-Help Получить помощь Get-Help -Full Get-Help -Example Get-Help * </p><p>Здесь первая запись расскажет вам, как использовать этот командлет. Вторая запись даст вам простое резюме конкретного командлета. Третья запись даст подробную информацию о соответствующем командлете. Четвертая запись будет содержать все, что показывает третий командлет, но добавит пример того, как использовать этот командлет. И, наконец, пятый командлет перечислит каждую команду, которая доступна для вашего использования.</p> <p><b> 3] Получить похожие команды </b></p> <p>Чтобы найти команды аналогичного типа или содержащие в себе определенную фразу, вы можете использовать командлет <i> Get-Command </i>. Однако в нем не перечислен каждый командлет в PowerShell, поэтому вы используете некоторые конкретные фильтры. Вы можете использовать следующие команды:</p><p>Get-Command -Name Get-Command -CommandType </p><p>Первый командлет поможет вам найти командлет с определенной фразой, а второй — отфильтровать командлеты, выполняющие определенную функцию.</p> <p><b> 4] Поиск определенного файла </b></p> <p><img src='https://i1.wp.com/techarks.ru/media01/imge_12267.png' width="100%" loading=lazy></p> <p>Если вам нужно найти определенный файл или каталог в определенном месте, вы можете использовать командлет <i> Get-Item </i>. Вы можете использовать его как</p><p>Get-Item </p><p>перечислить содержимое конкретного пути.</p> <p><b> 5] Прочитайте содержимое файла </b></p> <p><img src='https://i1.wp.com/techarks.ru/media01/imge_12280.png' height="86" width="350" loading=lazy></p> <p>Get-Content </p><p><b> 6] Прочтите информацию обо всех службах на компьютере </b>.</p> <p><img src='https://i1.wp.com/techarks.ru/media01/imge_12293.png' width="100%" loading=lazy></p> <p>Вы можете использовать командлет <i> Get-Service </i>, чтобы перечислить все службы, запущенные или остановленные на вашем компьютере. Кроме того, вы можете использовать следующие связанные командлеты для выполнения их соответствующих функций:</p><p>Start-Service Стоп-Service Suspend-Service Resume-Service Рестарт-Сервис </p><p><b> 7] Читайте информацию обо всех процессах на компьютере </b></p> <p><img src='https://i2.wp.com/techarks.ru/media01/imge_12305.png' width="100%" loading=lazy></p> <p>Подобно командлету Get-Service, вы можете использовать командлет <i> Get-Process </i>, чтобы вывести список всех процессов, запущенных на вашем компьютере.В качестве альтернативы вы можете использовать следующие связанные командлеты для выполнения соответствующих функций:</p><p>Запуск процесса Stop-Process Служба ожидания </p><p><b> 8] Настройка политики выполнения </b></p> <p>Хотя в PowerShell поддерживается создание и выполнение сценариев, существуют ограничения для каждого из них в рамках некоторых мер безопасности. Вы можете переключить уровень безопасности на любой из 4 уровней. Вы можете использовать командлет <i> Set-ExecutionPolicy </i>, а затем любой из уровней безопасности, указанных в</p><p>Set-ExecutionPolicy Неограниченный Set-ExecutionPolicy Все подписано Set-ExecutionPolicy Удаленная подпись Set-ExecutionPolicy Restricted </p><p>Здесь политики сверху вниз варьируются от самого низкого до самого высокого уровня безопасности.</p> <p><b> 9] Скопируйте файл или каталог </b></p> <p>Пользователь может использовать командлет <i> Copy-Item </i> </p><p>Copy-Item "E: \ TWCTest.txt" -Destination "D: \" </p><p><b> 10] Удалить файл или каталог </b></p> <p><img src='https://i1.wp.com/techarks.ru/media01/imge_12335.png' width="100%" loading=lazy></p> <p>Подобно командлету Copy-Item, пользователь может использовать командлет <i> Copy-Item </i> для копирования одного файла или каталога в другое место назначения. Синтаксис этого командлета</p><p>Remove-Item "E: \ TWCTest.txt" </p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </article> </div> <div class="cont_banner"> <div> </div> <div> </div> </div> <div class="cont_figSmall"> <p>Последние материалы раздела:</p> <section> <figure style='vertical-align:top;'> <a href="/microsoft-office/elektronnyi-planetarii-stellarium-obzor-astronomicheskih/"><img src="https://i0.wp.com/rainbowsky.ru/images/stellarium-02.png" style="width:80px" alt="Обзор астрономических программ для пк" loading=lazy></a> <figcaption> <a class="anonstitle" href="/microsoft-office/elektronnyi-planetarii-stellarium-obzor-astronomicheskih/">Обзор астрономических программ для пк</a> <p class='fig_article'>Stellarium - программа, представляющая собой виртуальный 3D планетарий. Установив это приложение на свой компьютер, вы сможете наблюдать за...</p> </figcaption> </figure> <figure style='vertical-align:top;'> <a href="/security/zapisat-obraz-ustanovlennoi-sistemy-na-fleshku/"><img src="https://i2.wp.com/droidov.com/wp-content/uploads/2017/05/programma-ustanovki-Windows-10.png" style="width:80px" alt="Записать образ установленной системы на флешку" loading=lazy></a> <figcaption> <a class="anonstitle" href="/security/zapisat-obraz-ustanovlennoi-sistemy-na-fleshku/">Записать образ установленной системы на флешку</a> <p class='fig_article'>Операционную систему обычно устанавливают с DVD-диска или качают нужные файлы из интернета. Но как быть тем пользователям, у которых в компьютере...</p> </figcaption> </figure> <figure style='vertical-align:top;'> <a href="/reviews/avtomaticheskaya-raskrutka-v-soc-setyah-chto-neobhodimo-chtoby/"><img src="https://i1.wp.com/webtrafff.ru/wp-content/uploads/2014/03/111113.jpg" style="width:80px" alt="Автоматическая раскрутка в соц" loading=lazy></a> <figcaption> <a class="anonstitle" href="/reviews/avtomaticheskaya-raskrutka-v-soc-setyah-chto-neobhodimo-chtoby/">Автоматическая раскрутка в соц</a> <p class='fig_article'>Социальные сети активно используются не только для знакомств, но и для бизнеса, способствуя реализации товаров и услуг. Для этого предпринимаются...</p> </figcaption> </figure> </section> </div> <dblock></dblock> <dblock></dblock> </div> <aside> <div> <div class="accordion"> <ul> <li><a href="/">Рубрики</a> <ul class='menu2' style="display:block;padding-top:15px;"> <li><a href="/category/problems/">Проблемы </a></li> <li><a href="/category/network/">Сетевое </a></li> <li><a href="/category/reviews/">Обзоры</a></li> <li><a href="/category/internet/">Интернет</a></li> <li><a href="/category/windows-7/">Windows 7</a></li> <li><a href="/category/programs/">Программы</a></li> <li><a href="/category/windows-8/">Windows 8</a></li> <li><a href="/category/microsoft-office/">Microsoft Office</a></li> <li><a href="/category/microsoft-windows/">Microsoft Windows</a></li> <li><a href="/category/recovery/">Восстановление</a></li> <li><a href="/category/services/">Сервисы</a></li> <li><a href="/category/news/">Новости</a></li> <li><a href="/category/windows-phone/">Windows Phone</a></li> <li><a href="/category/security/">Безопасность</a></li> </ul> </li> </ul> </div> <dblock></dblock> <div class="box" style="margin-left:5px"> <br> <div align='center'> </div> <span id="place"></span> </div> </div> </aside> </main> <footer> <div class="foot_logo"> <a href="/"><img src="/public/logo.svg" alt="logo" loading=lazy></a> </div> <div class="foot_info"> <p>© Компьютер Шаг за Шагом <span>TOZOO.RU</span>, 2024</p> <p>Все статьи, расположенные на сайте, несут лишь ознакомительный характер. </p> <dblock></dblock> </div> <div class="foot_ico"> </div> <SCRIPT language="Javascript"> var delta = 0; $(document).ready(function() { $(window).scroll(function() { var ScrollTo = $('#place').offset().top; if ($(window).scrollTop() > ScrollTo) { $('#float-box').animate({ 'top': delta + 'px' }, 500); } else $('#float-box').stop(true).animate({ 'top': '5600px' }, 100); }); $('#float-box .close').bind('click', function() { $(this).parent().remove(); }); }); </script> </footer> </div> <div class="overlay"></div> </body> </html>