PowerShell и все, что вам нужно знать об этой утилите

Зарегистрируйтесь и зарабатывайте 1000$ в день ⋙

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

Оглавление

Что такое PowerShell?

Microsoft PowerShell — это утилита командной строки и язык сценариев, представляющий собой мощный инструмент для администраторов, позволяющий автоматизировать широкий спектр задач для компьютеров и сетей. PowerShell содержит компоненты командной строки и построен на платформе .NET Framework. Если вы читаете WebTech360, вам следует знать, что PowerShell — это инструмент, который выбирают IT-администраторы для управления крупными сетями.

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

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

Если у вас есть рутинная задача обслуживания, настройка которой занимает несколько минут, вы можете реализовать ту же функциональность в виде одной команды с именем PowerShell. Тогда при следующем открытии этого скрипта он будет запущен в фоновом режиме. Освоение логики скриптов PowerShell, понимание принципов работы объектов и переменных (var) и грамотное развёртывание их в сети заставят вас задуматься, почему вы не использовали PowerShell раньше.

В этом руководстве рассматриваются основы PowerShell, которые будут полезны новичкам в IT, особенно тем, кто знаком с командной строкой Windows. В нём рассказывается, как использовать основные инструменты и команды, работать с файлами и папками, понимать объекты, использовать переменные и управлять удалёнными серверами.

Краткая история утилит командной строки Windows

После выхода Windows NT CMD.EXE стал утилитой командной строки для Windows. Хотя CMD.EXE унаследовал некоторые элементы от своего предшественника для DOS (COMMAN.COM), он всё ещё основывался на довольно «примитивном» языке сценариев: на командных файлах Windows (.CMD и .BAT). Добавление Windows Scripting Host и языков VBScript и JScript значительно расширило возможности программы в области сценариев.

Эти технологии представляют собой довольно сбалансированное сочетание продвинутых утилит командной строки и сред для написания скриптов. На самом деле проблема не в том, сколько файлов CMD.EXE, .CMD и Windows Scripting Host можно манипулировать с их помощью. Главная проблема — это возможность выполнения, казалось бы, простых задач.

Используя «фреймворк» из инструментов командной строки и скриптов, любой относительно сложный скрипт требует сочетания пакетных команд, Windows Scripting Host и автономных исполняемых файлов. Каждый скрипт использует разные соглашения для выполнения, запросов, анализа и возврата данных.

Слабая поддержка переменных в CMD.EXE, нестабильные интерфейсы и ограниченный доступ к настройкам Windows в сочетании с другим недостатком затрудняют реализацию и использование скриптов командной строки. Что же это за «ещё один недостаток», спросите вы? Текст. В этих технологиях всё представляет собой текст. Вывод команды или скрипта — это текст, который необходимо проанализировать и переформатировать, чтобы использовать в качестве входных данных для следующей команды. Это базовая отправная точка, которую PowerShell заимствует у всех традиционных оболочек.

Знакомство с инструментами, командами и модулями PowerShell

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

Инструменты PowerShell

PowerShell установлен по умолчанию в Windows 10, Windows 7, Windows Server 2008 R2 и более новых версиях Windows. Новые версии PowerShell добавляют новые функции и «командлеты» (термин Microsoft для команд PowerShell, произносится как «командлеты») и устанавливаются вместе с соответствующей версией Windows Management Framework (WMF).

В настоящее время WMF 5.1 является последней рекомендуемой версией. В некоторых случаях новые функции зависят не только от версии WMF, но и от операционной системы. Например, Windows 8 и Windows Server 2012 поддерживают командлет Test-NetConnection, позволяющий проверить подключение к определённому порту TCP/IP , но этот командлет недоступен в Windows 7 даже при использовании последней версии WMF.

В большинстве систем Windows пользователям доступны две среды PowerShell: консоль PowerShell и интегрированная среда сценариев PowerShell (ISE). Консоль PowerShell выглядит как традиционная командная строка, но обладает всеми функциями PowerShell. В консоли PowerShell доступны имена переменных, циклы, автодополнение команд и конвейеризация.

Для более продвинутого использования (например, написания скриптов) PowerShell ISE предоставляет функции автодополнения команд, подсветки кода и автодополнения кода Intellisense от Microsoft, которые помогают создавать и тестировать код PowerShell. PowerShell ISE также позволяет работать с несколькими скриптами PowerShell одновременно, используя навигацию с помощью вкладок.

командлеты в PowerShell

Основой команд PowerShell являются командлеты. При создании командлетов в PowerShell компания Microsoft использовала несколько стратегий проектирования.

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

Командлеты используют формат «глагол-существительное», например, Get-Service, Stop-Service или Import-Csv. Глагольная часть имени командлета указывает на действие, выполняемое над существительным. Как правило, командлеты, используемые для извлечения информации, содержат глагол Get в своём имени, например, Get-Process или Get-Content . Команды для изменения чего-либо обычно начинаются с глагола Set , а команды для добавления новой сущности — с Add или New .

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

Модули в PowerShell

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

В PowerShell такие псевдонимы, как DIR, CD, DEL и CLS, соответствуют командлетам Get-ChildItem, Set-Location, Remove-Item и Clear-Host соответственно. Псевдонимы параметров могут работать двумя способами: они могут использовать предопределенный псевдоним, предоставляемый командлетом, или их можно создать, введя необходимое количество символов для создания уникального соответствия между поддерживаемыми командлетом параметрами.

Управление файлами и папками

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

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

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

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

Параметр -Filter — один из способов поиска файлов. По умолчанию Get-ChildItem возвращает только прямые дочерние элементы целевого каталога. Эту функциональность можно расширить с помощью параметра -Recurse , который выполняет рекурсивный поиск по каталогам, содержащимся в текущем каталоге.

В PowerShell 4.0 Get-ChildItem добавил возможность ограничивать результаты файлами или каталогами с помощью ключа –File или –Directory . В предыдущих версиях PowerShell приходилось передавать результаты методу Where-Object, фильтруя их по свойству PSIsContainer для определения этого. Пример обоих методов, используемых для возврата каталогов, содержащихся в C:Users, показан ниже:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

Для обнаружения скрытых или системных файлов необходимо использовать  -Force . В PowerShell 4.0 и более поздних версиях Get-ChildItem также можно использовать для возврата только скрытых, только для чтения или системных файлов с помощью -Hidden, -ReadOnly и –System соответственно. Аналогичную функциональность можно было реализовать в предыдущих версиях, отфильтровав свойство Mode с помощью Where-Object:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

Проверить, существует ли файл

Обычно при работе с файлами нам нужно знать только, существует ли файл и верен ли путь к каталогу. PowerShell предоставляет для этого командлет Test-Path, который возвращает значение true или false.

Test-Path используется в качестве меры предосторожности перед попыткой скопировать или удалить определенный файл.

Копировать, перемещать и удалять файлы

Copy-Item: копирует один или несколько файлов или каталогов из местоположения, указанного параметром -Path, в местоположение, указанное параметром -Destination.

Move-Item: переместить файл или папку.

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

Remove-Item: Удалить файл, папку.

Переключатель -Force следует использовать при обнаружении файла, доступного только для чтения, а -Recurse — при удалении каталога и его содержимого.

Использование PowerShell -WhatIf и -Confirm

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

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

Скрипты PowerShell = пакетные файлы на стероидах

Сам PowerShell написан на языке .NET и в значительной степени основан на .NET Framework. Таким образом, PowerShell разработан как объектно-ориентированная оболочка и язык сценариев. Всё в PowerShell рассматривается как объект с полным набором возможностей .NET Framework. Команда предоставляет набор объектов, которые можно использовать, используя свойства и методы этого типа объекта. Когда требуется передать вывод одной команды другой, PowerShell фактически передаёт объект, а не только текстовый вывод первой команды. Это предоставляет следующей команде полный доступ ко всем свойствам и методам объекта в конвейере.

Обработка всего как объекта и возможность принимать объекты между командами — это большое изменение в теории утилит командной строки. При этом PowerShell по-прежнему работает как традиционная оболочка. Команды, скрипты и исполняемые файлы можно вводить и запускать из командной строки, а результаты отображаются в виде текста. Файлы Windows .CMD и .BAT, сценарии VBScript, JScript и исполняемые файлы, запускаемые внутри CMD.EXE, по-прежнему работают в PowerShell. Однако, поскольку они не являются объектно-ориентированными, они не имеют полного доступа к объектам, созданным и используемым в PowerShell. Эти устаревшие скрипты и исполняемые файлы по-прежнему будут обрабатывать всё как текст, но вы можете комбинировать PowerShell с рядом других технологий. Это особенно важно, если вы хотите начать использовать PowerShell с набором существующих скриптов, которые невозможно преобразовать все сразу.

Объяснение параметров PowerShell

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

Например, Get-Process извлечет и выведет список всех запущенных процессов в вашей операционной системе:

PowerShell и все, что вам нужно знать об этой утилите
Get-Process выводит список всех запущенных процессов.

Но что, если вам нужно получить только конкретный процесс? Это можно сделать с помощью параметров. Например, чтобы получить все процессы Slack, можно использовать параметр Name в командлете Get-Process:

Get-Process -Name Slack

Тогда вы увидите только процессы с именем «slack»:

PowerShell и все, что вам нужно знать об этой утилите
Использование Get-Process с параметрами

Совет : Некоторые параметры являются «позиционными», то есть их имена необязательны. В этом случае Get-Process -Name Slack и Get-Process Slack выполняют одну и ту же задачу.

Каждый командлет принимает различные типы параметров. Чтобы просмотреть допустимые параметры командлета в разделе «СИНТАКСИС», используйте команду Get-Help.

Get-Help Get-Process

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

PowerShell и все, что вам нужно знать об этой утилите
параметры синтаксиса командлета

В этом случае командлет Get-Process принимает такие параметры, как Name, Id, ComputerName, Module, FileVersionInfo и другие общие параметры. Символы здесь означают:

Символ

Имя

Значение

 

Барабан

Параметр не принимает входные данные

-

Дефис

Укажите имя параметра

<>

фигурные скобки

Заполнитель для текста

[]

Скобки

Параметр может принимать одно или несколько значений.

{}

фигурные скобки

Параметр принимает набор значений.

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

Get-Process [[-Name] ]

... означает, что параметр Name принимает одно или несколько строковых значений, тогда как эта команда:

Get-Process -Id 

... означает, что параметр Id принимает одно или несколько целочисленных значений.

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

Get-Process -Id 3016

Тогда в списке вы увидите только один процесс:

PowerShell и все, что вам нужно знать об этой утилите
Использование параметра Id в командлетах

Создать трубопровод

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

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

PowerShell и все, что вам нужно знать об этой утилите
Скрипт сортировки больших файлов PS1

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

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

Сохранить конвейер как скрипт PS1

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

Самый простой способ создать файл PS1 — вставить сценарий в Блокнот и сохранить файл с расширением .ps1.

PowerShell и все, что вам нужно знать об этой утилите
Создать сценарий с помощью Блокнота

После создания файла PS1 вы можете использовать его в PowerShell, выполнив ./ScriptName.ps1 :

PowerShell и все, что вам нужно знать об этой утилите
Использование скрипта PS1

Совет : если возникла ошибка прав доступа, самым быстрым решением будет запустить PowerShell с правами администратора при запуске скрипта.

Поздравляем! Теперь вы можете создавать скрипты PowerShell PS1.

Пример скрипта PowerShell

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

DIR — одна из самых распространённых команд в CMD.EXE . Эта команда отображает все файлы и подкаталоги, содержащиеся в родительском каталоге (как показано на рисунке 1). Помимо имени каждого объекта, отображается дата и время последнего обновления, а также размер каждого файла. DIR также отображает общий размер всех файлов в каталоге, а также общее количество файлов и подкаталогов.

PowerShell и все, что вам нужно знать об этой утилите
Рисунок 1

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

Команда DIR в PowerShell предоставляет практически ту же информацию, что и упомянутая выше: список файлов и папок, дату и время их последнего изменения, а также размер каждого файла. Однако в ней отсутствует сводная информация, которую предоставляет команда DIR в CMD.EXE: общий размер всех файлов в папке, общее количество файлов и общее количество подпапок.

PowerShell и все, что вам нужно знать об этой утилите
Рисунок 2

Для этого примера вам потребуется создать скрипт PowerShell, имитирующий команду CMD.EXE DIR. Ниже я объясню наиболее важные части скрипта.

DIR.PS1: Заголовок

Скрипт PowerShell состоит из команд PowerShell в текстовом файле с расширением .PS1. Вместо DIR следует использовать текстовый файл с именем DIR.PS1.

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

.DIR.PS1 X:Folder

Где X — буква раздела диска (например, C, D, E), а Folder — имя папки.

Если вам нужна информация о разделе диска, вам понадобится инструментарий управления Windows (WMI). Подробности WMI выходят за рамки этой статьи, поэтому мы не будем их здесь рассматривать. Но приведённый ниже код PowerShell достаточно прост для понимания и без использования WMI. Вы можете создать переменную «$filter» для использования с командой Get-WmiObject. Этот фильтр сообщает команде Get-WmiObject, что вам нужна информация только о конкретном диске. Результаты команды Get-WmiObject сохраняются в переменной $volInfo. Помните, что в PowerShell всё является объектом; $volInfo теперь является объектом, возвращаемым командой Get-WmiObject.

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

Теперь у вас есть доступ ко всем объектам и методам, связанным с объектом. Серийный номер тома доступен через свойство VolumeSerialNumber. Возвращаемый номер представляет собой строку из 8 символов. Но часто требуется отформатировать его как четыре числа, разделённые дефисом. Это можно сделать аналогично следующей строке. Дефис в конце первой строки — это символ продолжения с��роки в PowerShell. По сути, он сообщает PowerShell, что строка не разрывается и включает следующую строку. Разрывы строк не обязательны при написании кода, но для уменьшения его ширины и повышения читабельности их следует использовать.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

Теперь, когда у вас есть объект $volInfo, вы можете вывести информацию заголовка DIR на экран. Если у диска нет имени, текст, выводимый на экран, будет немного отличаться от текста, выводимого с именем. Для проверки свойства VolumeName используется простой оператор If-Else. Оператор Write-Host выводит каждую строку текста на экран.

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

Символ «`n» в начале и конце команды Write-Host используется для вставки новой строки перед текстом и после него. Команда Write-Host добавляет новую строку в конце каждой строки. Таким образом, «`n» создаёт пустую строку перед текстом и после него.

Вы заметили «-eq» в команде If? Это оператор сравнения на равенство. В таблице ниже представлены все операторы сравнения:

-экв, -иэкв Сравнить по
-не, -ине Сравнение не равно
-гт, -игт Сравнить больше чем
-ге, -иге Сравнить больше или равно
-лт, -илт Сравнить меньше чем
-ле, -иле Сравнить меньше или равно

Символ -i перед операторами сравнения указывает на то, что оператор нечувствителен к регистру.

PowerShell и все, что вам нужно знать об этой утилите
Рисунок 3: Выходные данные текущего скрипта

DIR.PS1: Список файлов/папок

Теперь вы готовы отобразить содержимое и свойства этой папки. Первым делом необходимо вызвать команду PowerShell Get-ChildItem, чтобы получить коллекцию файлов и передать её скрипту в качестве параметра. Команда Get-ChildItem получит коллекцию объектов файлов и папок, а не только их имена, но и передаст эти объекты непосредственно команде Sort-Object для их сортировки. По умолчанию команда Sort-Object сортирует объекты по свойству Name. Поэтому вам не нужно указывать какие-либо другие параметры. Отсортированная коллекция объектов будет сохранена в переменной с именем $items.

$items = Get-ChildItem $args[0] | Sort-Object

Получив коллекцию объектов файлов и папок, необходимо перебрать их в цикле и отобразить соответствующие свойства. Для этого используется команда ForEach. Для каждого файла или папки будут отображены следующие свойства: дата и время последнего изменения, имя, длина или размер файла. Странно выглядящие строки в скобках — это коды формата строк .NET. Они используются для выравнивания полей по левому/правому краю и форматирования дат, времени и чисел. Понимание этих кодов формата строк не так важно, поскольку они не являются существенными для сути данного скрипта.

Оператор If определяет, является ли объект каталогом. Если первый символ атрибута Mode — «d», объект является каталогом. Необходимо проверить ещё раз, поскольку код каталогов часто отличается от кода файлов.

Обратите внимание на строку $totalDirs++ внутри оператора If. Это счётчик, отвечающий за отслеживание количества каталогов. Аналогично, существует переменная $totalFiles, которая используется для отслеживания общего размера всех файлов. Эти значения всегда вычисляются во время выполнения. Но отображаются только после завершения процесса вывода списка файлов.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell и все, что вам нужно знать об этой утилите
Рисунок 4: Отображает выходные данные обновленного скрипта.

DIR.PS1: Нижний колонтитул

Осталось только вывести на экран общее количество файлов, каталогов, общий размер всех файлов и свободное место на данном разделе диска. Для этого вам понадобятся переменные-счётчики ($totalFiles, $totalDirs, $totalSize), созданные в предыдущем разделе. Узнать объём свободного места можно из переменной $volInfo, созданной в начале скрипта.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell и все, что вам нужно знать об этой утилите
Рисунок 5: Отображает полные выходные данные скрипта.

Прогнозы и улучшения могут быть

Хотя создаваемый вами скрипт создает практически идентичный вывод команды CMD.EXE DIR, есть некоторые предостережения, о которых следует знать, и некоторые улучшения, которые можно внести.

  • Этот скрипт не выполняет проверку ошибок.
  • Если скрипту не передан допустимый путь, скрипт завершится ошибкой PowerShell.
  • Общее количество каталогов, указанных в скрипте, на 2 меньше, чем результат команды CMD.EXE DIR, поскольку команда Get-ChildItem не учитывает два каталога «.» и «..», как в CMD.EXE.
  • Ваш скрипт сортирует только по имени файла, имени папки и не предоставляет никакой другой сортировки по атрибутам.
  • Ваш скрипт не может отобразить содержимое папки и всех подпапок.

Как PowerShell помогает автоматизировать любые процессы на вашем ПК

Написание простых скриптов PowerShell

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

Примечание : Если при выполнении скрипта возникла ошибка, связанная с политикой выполнения, вам может потребоваться временно разрешить выполнение скрипта, выполнив команду «Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass».

Пакетное переименование файлов в папке

Вы можете использовать PowerShell для копирования, перемещения и удаления файлов на компьютере. Вы также можете массово переименовывать файлы определённого типа. Например, вот как можно переименовать несколько текстовых файлов, заменив префикс «oldco» на «newco» в их именах:

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

В приведённом выше скрипте «.txt» — это фильтр по расширению файла. Вы можете изменить его, установив .jpg, .docx и т.д. для поиска файлов разных типов.

Автоматический запуск приложения

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

#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"

Вставьте скрипт в файл «Блокнот» и сохраните его как LaunchFavoriteApps.ps1. Затем дважды щёлкните по файлу, чтобы запустить все приложения, перечисленные в скрипте.

Скопируйте важные файлы в резервное хранилище.

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

#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse

Напишите скрипт PowerShell для автоматической ежедневной организации файлов

Поскольку каждый день загружаются файлы самых разных типов, папка «Загрузки» может быстро засориться разбросанными по ней файлами. Чтобы исправить это, можно написать скрипт PowerShell, который в конце каждого дня сортирует загруженные файлы по папкам по типу.

Откройте новый файл в Блокноте и вставьте следующий скрипт. Убедитесь, что путь к исходной папке в скрипте соответствует пути к папке «Загрузки»:

# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"

Чтобы сохранить файл, нажмите «Файл» > «Сохранить как» и введите имя OrganizeDownloadsFolder.ps1 . Затем нажмите «Тип файла» и выберите «Все файлы» . Дважды щёлкните по файлу OrganizeDownloadsFolder.ps1 , чтобы запустить скрипт.

Планирование и выполнение задач

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

Откройте PowerShell, скопируйте и вставьте следующий скрипт и нажмите Enter . Замените «J:\OrganizeDownloadsFolder.ps1» полным путём к файлу скрипта OrganizeDownloadsFolder.ps1 .

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

После этого нажмите Enter . Скрипт создаст запланированную задачу в Планировщике заданий для запуска скрипта упорядочивания файлов ежедневно в 17:00. Если вы предпочитаете другое время, вы можете изменить его в скрипте выше.

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

Хотя PowerShell — мощный инструмент и язык сценариев, его освоение и использование занимает некоторое время, особенно если вы не знакомы со средой .NET Framework. Надеюсь, эта статья и пример скрипта будут полезны всем, кто хочет разобраться в PowerShell. Однако пример скрипта, созданный в статье, довольно прост. Я считаю, что его можно доработать и усовершенствовать для более сложных приложений.

Tags: #System
Sign up and earn $1000 a day ⋙

Leave a Comment

Инструкции по переустановке настроек Windows

Инструкции по переустановке настроек Windows

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

Как закрыть все открытые приложения одновременно в Windows 11?

Как закрыть все открытые приложения одновременно в Windows 11?

В Windows 11 нет специальной кнопки закрытия всех приложений, но есть несколько способов закрыть все открытые приложения одновременно.

9 старых инструментов Windows, которые полезны и сегодня

9 старых инструментов Windows, которые полезны и сегодня

От мониторинга производительности до быстрой настройки системы — эти встроенные утилиты полезны как никогда.

Как исправить код ошибки 0x80004005

Как исправить код ошибки 0x80004005

Код ошибки 0x80004005 — это тип неизвестной ошибки Windows, причина которой связана с рядом различных проблем.

Как отобразить отсутствующий значок Bluetooth на панели задач Windows

Как отобразить отсутствующий значок Bluetooth на панели задач Windows

Если вы не можете найти значок Bluetooth на панели задач, выполните следующие действия, чтобы отобразить отсутствующий значок Bluetooth на панели задач в Windows 10.

Как изменить браузер по умолчанию в Windows 10

Как изменить браузер по умолчанию в Windows 10

Windows 10 позволяет пользователям изменять веб-браузер по умолчанию в системе чрезвычайно гибким и простым способом.

Как редактировать и сбросить настройки Центра уведомлений Windows 11

Как редактировать и сбросить настройки Центра уведомлений Windows 11

Пользователи могут изменять и редактировать настройки в Центре действий в соответствии со своими потребностями.

4 способа изменить расширение файлов в Windows 11

4 способа изменить расширение файлов в Windows 11

В этой статье объясняется, как изменить расширение файлов в Windows 11, а также обсуждается разница между расширениями файлов и типами файлов.

Инструкции по исправлению ошибки «не распознано как внутренняя или внешняя команда» при использовании CMD в Windows

Инструкции по исправлению ошибки «не распознано как внутренняя или внешняя команда» при использовании CMD в Windows

Однажды вы включаете компьютер, открываете командную строку и видите ошибку: «Команда не распознана как внутренняя или внешняя команда, исполняемая программа или пакетный файл». Что делать?

Как отключить фоновые приложения в Windows

Как отключить фоновые приложения в Windows

Отключение фоновых приложений в Windows 10 поможет вашему компьютеру работать медленнее и сэкономит системные ресурсы. В этой статье WebTech360 вы найдете информацию о том, как отключить фоновые приложения в Windows 10.

Как включить/отключить языковую панель Windows 11

Как включить/отключить языковую панель Windows 11

В зависимости от потребностей пользователи могут быстро включить или отключить языковую панель на компьютере. Ниже приведены инструкции по включению или отключению языковой панели в Windows 11.

Как очистить кэш шейдеров NVIDIA в Windows

Как очистить кэш шейдеров NVIDIA в Windows

Очистка кэша шейдеров NVIDIA приведёт к сбросу системы и её переустановке с использованием новых данных. Ниже приведены инструкции по очистке кэша шейдеров NVIDIA.

Как узнать, установил ли кто-то программу слежки на ваш ноутбук?

Как узнать, установил ли кто-то программу слежки на ваш ноутбук?

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

Как включить расширенные настройки в Windows 11

Как включить расширенные настройки в Windows 11

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

Как предотвратить автоматическую блокировку Windows

Как предотвратить автоматическую блокировку Windows

Чтобы запретить пользователям блокировать свои компьютеры с Windows 10, выполните следующие действия, чтобы отключить экран блокировки в Windows 10.

Инструкции по переустановке настроек Windows

Инструкции по переустановке настроек Windows

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

Как закрыть все открытые приложения одновременно в Windows 11?

Как закрыть все открытые приложения одновременно в Windows 11?

В Windows 11 нет специальной кнопки закрытия всех приложений, но есть несколько способов закрыть все открытые приложения одновременно.

9 старых инструментов Windows, которые полезны и сегодня

9 старых инструментов Windows, которые полезны и сегодня

От мониторинга производительности до быстрой настройки системы — эти встроенные утилиты полезны как никогда.

Как исправить код ошибки 0x80004005

Как исправить код ошибки 0x80004005

Код ошибки 0x80004005 — это тип неизвестной ошибки Windows, причина которой связана с рядом различных проблем.

Как отобразить отсутствующий значок Bluetooth на панели задач Windows

Как отобразить отсутствующий значок Bluetooth на панели задач Windows

Если вы не можете найти значок Bluetooth на панели задач, выполните следующие действия, чтобы отобразить отсутствующий значок Bluetooth на панели задач в Windows 10.

Как изменить браузер по умолчанию в Windows 10

Как изменить браузер по умолчанию в Windows 10

Windows 10 позволяет пользователям изменять веб-браузер по умолчанию в системе чрезвычайно гибким и простым способом.

Как редактировать и сбросить настройки Центра уведомлений Windows 11

Как редактировать и сбросить настройки Центра уведомлений Windows 11

Пользователи могут изменять и редактировать настройки в Центре действий в соответствии со своими потребностями.

4 способа изменить расширение файлов в Windows 11

4 способа изменить расширение файлов в Windows 11

В этой статье объясняется, как изменить расширение файлов в Windows 11, а также обсуждается разница между расширениями файлов и типами файлов.

Инструкции по исправлению ошибки «не распознано как внутренняя или внешняя команда» при использовании CMD в Windows

Инструкции по исправлению ошибки «не распознано как внутренняя или внешняя команда» при использовании CMD в Windows

Однажды вы включаете компьютер, открываете командную строку и видите ошибку: «Команда не распознана как внутренняя или внешняя команда, исполняемая программа или пакетный файл». Что делать?

Как отключить фоновые приложения в Windows

Как отключить фоновые приложения в Windows

Отключение фоновых приложений в Windows 10 поможет вашему компьютеру работать медленнее и сэкономит системные ресурсы. В этой статье WebTech360 вы найдете информацию о том, как отключить фоновые приложения в Windows 10.

Как включить/отключить языковую панель Windows 11

Как включить/отключить языковую панель Windows 11

В зависимости от потребностей пользователи могут быстро включить или отключить языковую панель на компьютере. Ниже приведены инструкции по включению или отключению языковой панели в Windows 11.

Как очистить кэш шейдеров NVIDIA в Windows

Как очистить кэш шейдеров NVIDIA в Windows

Очистка кэша шейдеров NVIDIA приведёт к сбросу системы и её переустановке с использованием новых данных. Ниже приведены инструкции по очистке кэша шейдеров NVIDIA.

Как узнать, установил ли кто-то программу слежки на ваш ноутбук?

Как узнать, установил ли кто-то программу слежки на ваш ноутбук?

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

Как включить расширенные настройки в Windows 11

Как включить расширенные настройки в Windows 11

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

Как предотвратить автоматическую блокировку Windows

Как предотвратить автоматическую блокировку Windows

Чтобы запретить пользователям блокировать свои компьютеры с Windows 10, выполните следующие действия, чтобы отключить экран блокировки в Windows 10.