Большинство системных администраторов используют 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
Когда ваш компьютер замедляется, эта команда быстро покажет, какие программы потребляют больше всего памяти.
Комментарии (0)