Операции с файлами с помощью PowerShell и WMI

Windows PowerShell 2.0[⇨] был выпущен в составе Windows 7, Windows 8 и Windows Server 2008 R2, а также Windows Server 2012 R2, как неотъемлемый компонент системы. Кроме того, вторая версия доступна и для других систем, таких, как Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008[3] и Windows Server 2012.

Просмотр всех установленных приложений с помощью PowerShell

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

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

    Get-AppxPackage –AllUsers | Select Name, PackageFullName

  4. (Необязательно) Введите следующую команду, чтобы просмотреть все приложения с подробностями, и нажмите Enter:

    Get-AppxPackage –AllUsers

Просмотр всех установленных приложений с помощью PowerShell

Когда вы выполните эти шаги, вы увидите список со всеми приложениями Microsoft Store, установленными в Windows 10.

Windows Powershell – ввод с клавиатуры

Вспомним наш пример:

PowerShell write-host «Попытка выполнить внешнюю функцию.» write-host «Пожалуйста, введите значение, которое вы хотите узнать:» write-host «1. Результат выполнения функции» write-host «2. Дату время и погоду» write-host «3. Дату и время» $ex=read-host

12345678 write-host «Попытка выполнить внешнюю функцию.»write-host «Пожалуйста, введите значение, которое вы хотите узнать:» write-host «1. Результат выполнения функции» write-host «2. Дату время и погоду» write-host «3. Дату и время» $ex=read-host

Ключевая строка, которая отвечает за ожидание ввода пользователя – самая последняя. read-host – отвечает за прием входящих введенных символов. В нашем случае обыграно так, что ввод записывается сразу в переменную. Это было необходимо для того, чтобы выбрать одно из трех заранее известных значений. Достаточно простой пример, и в принципе все понятно. Так же и понятно как работает read-host.

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

. .\try_execute_ write-host «Попытка выполнить внешнюю функцию.» write-host «Пожалуйста, введите значение, которое вы хотите узнать:» write-host «1. Результат выполнения функции» write-host «2. Дату время и погоду» write-host «3. Дату и время» $ex=read-host if ($ex -eq «1» -or $ex -eq «2» -or $ex -eq «3») { write-host «Выполняю функцию:» } elseif ([string]::IsNullOrEmpty($ex)) { write-host «Вы указали неверный параметр.» break; } switch ($ex){ «1»{ Execute-Function } «2»{ Get-DateOne } «3»{ Get-DateTwo } Default { write-host «Такой функции не существует.» } }

123456789101112131415161718192021222324252627282930313233343536 . .\try_execute_function.ps1 writehost «Попытка выполнить внешнюю функцию.»writehost «Пожалуйста, введите значение, которое вы хотите узнать:» writehost «1. Результат выполнения функции» writehost «2. Дату время и погоду» writehost «3. Дату и время» $ex=readhost if ($ex eq «1» or $ex eq «2» or $ex eq «3») { writehost «Выполняю функцию:»}elseif ([string]::IsNullOrEmpty($ex)) { writehost «Вы указали неверный параметр.» break;}switch ($ex){ «1»{ ExecuteFunction } «2»{ GetDateOne } «3»{ GetDateTwo } Default { writehost «Такой функции не существует.» }}

Что мы сделали? Во-первых, спасибо Дмитрию, оставившему комментарий в прошлой статье, который подсказал, что файл с функциями можно подключать только в начале файла. Во-вторых запомните именно такой синтаксис в операторе if. Если вы попробуете реализовать кастомный exception с условием -ne (not equals), то условие срабатывать не будет. Это связано с особенностями семантики powershell. В-третьих, теперь если мы ничего не введем, то у нас вылетит ошибка “Вы ничего не выбрали!”. В четвертых, у нас целых 2 исключения:

  1. Первое находится в elseif – выпадет в случае, если мы ничего не ввели.
  2. Второе находится в Default – это блок, который выводит значение по умолчанию, если в оператор switch прилетело значение, которого в нем нет.

Так же мы добавили завершение скрипта, если мы ничего не ввели – break;

Итак, давайте попробуем запустить наш скрипт:

Обзор

Команды, исполняемые в Windows PowerShell, могут быть в форме командлетов, которые являются специализированными классами .NET, созданными с целью предоставления функциональности в PowerShell в виде сценариев PowerShell (.PS1) или являются обычными исполняемыми файлами. Если команда является исполняемым файлом, то PowerShell запускает её в отдельном процессе; если это команда, то он исполняется внутри процесса PowerShell. PowerShell предоставляет интерфейс командной строки, в котором можно вводить команды и отображать выводимые ими данные в текстовом виде. Этот пользовательский интерфейс, базирующийся на стандартном механизме консоли Windows, предоставляет настраиваемый механизм автозавершения команд, но не обладает возможностью подсветки синтаксиса, хотя при желании её можно обеспечить[4]. В PowerShell также можно создавать псевдонимы (англ. alias) для командлетов, которые при вызове преобразуются в оригинальные команды. Кроме того, поддерживаются позиционные и именованные параметры для командлетов. При выполнении командлета работа по привязке значений аргументов к параметрам выполняется самим PowerShell, но при вызове внешних исполняемых файлов аргументы передаются им для самостоятельного разбора.

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

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

Расширенная система типов (англ. Extended Type System, ETS) PowerShell базируется на системе типов .NET, но реализует некоторые дополнения. Например, она позволяет создавать различные представления объектов, отображая лишь некоторые из их свойств и методов, а также применять специальное форматирование и механизмы сортировки. Эти представления привязываются к оригинальным объектам с помощью конфигурационных файлов в формате XML.

Параметр / TRANSLATE

При использовании оператора GET в комбинации с любым параметром происходит преобразование символов  < и > в HTML обозначение — &lt; и &gt; Если возникает необходимость выводить именно символы < и >, то надо дополнительно использовать параметр /TRANSLATE со значением BASICXML. Например:

ENVIRONMENT GET /FORMAT:RAWXML /TRANSLATE:BASICXML

Стоит обратить внимание, что формат вывода данных и их вид будет зависеть от порядка следования параметров /TRANSLATE и /FORMAT.

  • Если /TRANSLATE идет раньше /FORMAT, то форматирование данных произойдет после преобразования
  • Если /FORMAT идет раньше /TRANSLATE, то форматирование данных произойдет до преобразования
Читайте также:  Медленно работает компьютер Windows XP что делать?