Команды Windows PowerShell, которые я использую чаще всего и почему они так полезны

Большинство системных администраторов используют powershell для создания сценариев и автоматизации, но это не только для ИТ-специалистов – эти команды нужны всем, кто имеет дело с беспорядочными папками. Я использую их для поиска старого кода, организации клиентских файлов и устранения хаоса, который образуется после месяцев работы в условиях жестких сроков.

PowerShell – это оболочка командной строки и язык сценариев. Хотя в предыдущих версиях Windows было специальное приложение PowerShell, Windows Terminal теперь является предпочтительной консолью для запуска сред оболочки (включая PowerShell, Command Prompt и другие).

Все эти команды работают как в отдельном приложении PowerShell, так и в терминале Windows – для их использования достаточно открыть вкладку PowerShell в терминале Windows.

12. Get-Help

Я изучал PowerShell по видеороликам на YouTube, и одной из первых команд, которую все упоминали, была Get-Help. Как следует из названия, Get-Help помогает найти информацию о командах PowerShell с их синтаксисом и параметрами; в ней даже приведены примеры использования.

Чтобы узнать, как работает команда, введите Get-Help, а затем имя команды:

Get-Help Get-Process

Это покажет вам краткое описание команды, синтаксис и параметры. Если вам нужны более подробные сведения, добавьте параметр -Examples:

Get-Help Get-Process -Examples

Это покажет примеры использования команды. С его помощью можно также найти дополнительную информацию о любой команде в официальной документации Microsoft по PowerShell в Интернете:

Get-Help Get-Process -Online

При выполнении приведенной выше команды PowerShell перенаправит вас на официальную документацию Microsoft по этой команде.

11. Get-Command

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

Например, попробуем найти все команды, содержащие слово process:

Get-Command *process*

Это покажет все команды, в названии которых есть слово process. Можно сузить поиск до определенных типов команд. Например, если вам нужны только команды (не функции или псевдонимы), начинающиеся с Get:

Get-Command -Name Get* -CommandType Cmdlet

Если вы ищете команды, относящиеся к определенному модулю, например сетевому:

Get-Command -Module NetTCPIP

Get-Command – это гораздо более эффективный способ найти нужные команды, чем запускать браузер и искать их в Интернете.

10. Test-NetConnection

Если вы используете отдельные инструменты для ping, telnet и traceroute, то команда Test-NetConnection выполняет все три функции. Это инструмент для устранения неполадок в сети, который проверяет, связана ли проблема с вашей сетью, сервером или чем-то еще.

Чтобы проверить, доступен ли веб-сайт, выполните команду:

Test-NetConnection makeuseof.com

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

Test-NetConnection server.company.com -Port 443

Чтобы получить подробную информацию о сетевом пути, можно использовать параметр -TraceRoute в конце команды. Тип:

Test-NetConnection 8.8.8.8 -TraceRoute

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

9. Get-ChildItem

Get-ChildItem показывает файлы и папки в любом каталоге. Хотите посмотреть, что находится в папке Documents? Просто введите это, заменив «имя пользователя» на свое:

Get-ChildItem C:\Users\Username\Documents

Чтобы найти файлы PDF, измененные за последнюю неделю:

Get-ChildItem C:\Users\YourName\Documents -Filter *.pdf | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)}

Параметр -Recurse выполняет поиск по всем вложенным папкам. Например, чтобы найти каждый файл журнала в папке Projects и всех ее подпапках:

Get-ChildItem C:\Projects -Recurse -Filter *.log

Если на диске мало места, можно использовать этот параметр для поиска больших файлов размером более 1 ГБ:

Get-ChildItem C:\ -Recurse -File | Where-Object {$_.Length -gt 1GB} | Select-Object FullName, @{Name="SizeGB";Expression={$_.Length/1GB}}

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

8. Where-Object

В последнем примере вы могли заметить, что мы использовали команду Where-Object для поиска больших файлов, и вам стало любопытно, для чего она нужна. Where-Object фильтрует данные, выбирая объекты с определенными значениями свойств – это похоже на оператор if в программировании. Внутри фигурных скобок $_ представляет каждый элемент, оцениваемый по условиям фильтрации.

Например, если вам нужно просмотреть все запущенные службы, введите эту команду:

Get-Service | Where-Object {$_.Status -eq "Running"}

Если вам нужно найти процессы, использующие более 100 МБ памяти, попробуйте выполнить эту команду:

Get-Process | Where-Object {$_.WorkingSet -gt 100MB}

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

Get-ChildItem -Filter *.docx | Where-Object {$_.Length -gt 5MB -and $_.LastWriteTime -gt (Get-Date).AddMonths(-1)}

Фигурные скобки содержат логику фильтрации. Символ $_ обозначает каждый оцениваемый элемент. Вы можете распределить длинный фильтр по нескольким строкам, особенно если у вас несколько условий. Это сделает ваш скрипт более читабельным, например:

Get-ChildItem | Where-Object {
   $_.Length -gt 1MB -and
   $_.Extension -eq ".log"
}

7. Select-Objec

Часто вывод команд содержит больше информации, чем вам нужно. Select-Object позволяет выбрать только нужные данные. Выбранные свойства можно экспортировать в CSV-файл с помощью команды Export-Csv. Чтобы просмотреть только имя и состояние служб, используйте:

Get-Service | Select-Object Name, Status

Если вам нужны пять процессов, использующих наибольшее количество CPU, то вот они:

Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU

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

Get-ChildItem | Select-Object Name, @{Name="SizeMB";Expression={$_.Length/1MB}}

Если вы хотите извлечь одно значение свойства, используйте параметр -ExpandProperty:

Get-Process notepad | Select-Object -ExpandProperty Id

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

6. Get-Member

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

Get-Process | Get-Member

Эта команда показывает такие свойства, как CPU, Id и WorkingSet, а также такие методы, как Kill() и Refresh(). Если вы хотите увидеть только свойства, добавьте следующее:

Get-Process | Get-Member -MemberType Property

При работе с файлами:

Get-ChildItem C:\temp\test.txt | Get-Member

Приведенная выше команда показывает такие свойства, как Length и LastWriteTime, а также такие методы, как Delete() и MoveTo(). Например, вы можете использовать Length для фильтрации файлов по размеру или LastWriteTime для поиска недавно измененных файлов.

5. Set-Clipboard и Get-Clipboard

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

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

Get-Process | Select-Object Name, CPU | Set-Clipboard

Теперь вы можете вставить результаты в Excel или любой текстовый редактор. Если вам нужно получить текст из буфера обмена в PowerShell, это очень просто:

$text = Get-Clipboard

Этот способ действительно хорош при обработке списков. Попробуйте скопировать список имен компьютеров из Excel, а затем:

Get-Clipboard | ForEach-Object { Test-NetConnection $_ }

Это позволит проверить подключение к каждому компьютеру в списке. Интеграция PowerShell с другими приложениями позволяет значительно ускорить выполнение повторяющихся задач.

4. Out-GridView

Иногда требуется интерактивная сортировка и фильтрация результатов. Out-GridView открывает отдельное окно с таблицей с возможностью поиска и сортировки.

Get-Process | Out-GridView

Откроется новое окно со списком запущенных процессов в формате таблицы GUI. Щелкните заголовки столбцов для сортировки или введите текст в поле фильтра для поиска. Если вы хотите выбрать элементы из таблицы, используйте:

Get-Service | Out-GridView -PassThru | Restart-Service

Параметр -PassThru позволяет выбирать строки и передавать их следующей команде. Выберите службы, которые нужно перезапустить, нажмите OK, и PowerShell перезапустит только эти службы.

Для анализа журналов:

Get-EventLog -LogName Application -Newest 1000 | Out-GridView

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

3. Get-Process

Get-Process показывает каждую программу, запущенную на вашем компьютере, включая данные об использовании памяти, процессорном времени и идентификаторах процессов.

Чтобы увидеть все запущенные процессы, просто введите:

Get-Process

Если вы ищете конкретную программу, например Google Chrome:

Get-Process chrome

Чтобы остановить не реагирующую программу, можно объединить ее с командой Stop-Process:

Get-Process notepad | Stop-Process

Если вы хотите узнать, что пожирает вашу память, попробуйте:

Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10

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

Зарубин Иван Эксперт по Linux и Windows

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

Похожие статьи

Комментарии (0)

Автар по умолчанию