Как использовать скрипт PowerShell для получения списка установленных приложений в Windows?
Иногда вам может понадобиться заново установить операционную систему по тем или иным причинам. В этом случае все приложения, работающие на компьютерах, будут удалены. Если на вашем компьютере установлено большое количество приложений, то вам определенно необходим список приложений, установленных на вашем компьютере.
Список поможет вам вести учет всех необходимых приложений на вашем компьютере, и вы сможете установить их в любое время. Однако есть сценарий PowerShell, который может облегчить вашу работу. Сценарий создает список приложений, запущенных на вашем компьютере, и сохраняет его на диске C. Вы должны переместить список с диска C в другое место. Это может быть ваша флешка, облако, другой диск и т. Д.
Здесь мы покажем вам, как получить список приложений с помощью скриптов PowerShell.
1. Прежде всего, загрузите скрипт «Получить список установленных приложений с компьютеров» (PowerShell) по ссылке здесь .
Windows Powershell: Что это и как использовать? Основные команды 🖥️⚙️🧰
2. Затем переименуйте файл, чтобы «PowerShell» не отображался ни в имени скрипта, ни в папке, где находится скрипт. Требуемый сценарий PowerShell представляет собой файл PSM1. Вы должны импортировать модуль.
3. Теперь откройте Кортану. Введите PowerShell и откройте его с правами администратора.
4. Теперь напишите скрипт для импорта пути к файлу PSM1.
импорт-модуль «путь к файлу»
Команда будет выглядеть так;
Если PowerShell выдает запрос о том, что сценарии заблокированы политикой выполнения, необходимо остановить и отредактировать политику выполнения PowerShell, прежде чем импортировать модуль.
5. Следующий шаг включает получение списка установленных приложений. Откройте файл PSM1 с помощью блокнота. Он сообщит вам, что вы знаете все функции, которые скрипт добавляет в PowerShell.
См. также: Полный список команд CTRL в Windows 10
6. В этом случае добавляется следующая функция, которая предоставляет список приложений в локальной или удаленной системе.
7. Затем выполните следующую команду
Вам будет предложено ввести имя компьютера, для которого вы хотите получить список установленных приложений. Введите имя своего компьютера и получите список установленных на нем приложений или просто введите имя сетевого компьютера. Сценарий позволяет вводить несколько имен компьютеров и предоставляет список приложений.
Список сохраняется в виде файла CSV, если вы введете следующую команду:
Get-OSCInstalledApplication -ComputerName «Computer Name» | Export-Csv -Path C:installedApps.csv
Если вы работаете с несколькими компьютерами, вы можете импортировать имена компьютеров из файла CSV. Используйте следующую команду:
Get-OSCInstalledApplication -ComputerFilePath C:ScriptComputerList.csv
Источник: techno-blogger.ru
Скрипты PowerShell с нуля. Уроки для начинающих
Powershell получить список программ
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разобрали основные понятия Active Directory и рассмотрели его структуру. Идем дальше и сегодня я хочу вас научить выводить список установленных программ в Windows 11, но данные методы подойдут и для любой другой версии. Данная задача может перед вами появиться, когда нужно будет сделать некую инвентаризацию приложений на ваших серверах или рабочих станциях или убедиться есть ли у пользователя та или иная программа для работы.
Для чего это нужно?
- Инвентаризация программного обеспечения — очень часто в организациях любят давать пользователям права на рабочую станцию, что в последствии ведет к тому. что пользователь может наставить кучу разного ПО, и не всегда лицензионного.
- Перед переустановкой системы — Это то же может вас с подвигнуть к получению списку установленных программ в Windows 11 и предыдущих версий, чтобы пользователь получая свежую систему смог там обнаружить свое привычное окружение. Очень подойдет для формирования скрипта Winget.
- Создание списка стандартных приложений для компании — такое то же часто бывает, что компания хочет ввести стандарты, что можно использовать, а что нет. Для этого логично, что необходимо иметь список.
Как вывести список установленных программ через Winget
Winget — это новая утилита командной строки, которая появилась в Windows 10 и позволяет производить установку программ через интернет из репозитория Microsoft. Но она так же умеет показывать список всех установленных пакетов и приложений. Для этого вызовите командную строку или оболочку PowerShell и введите команду:
winget list
На выходе вы получите общий список программ, которые есть в вашей Windows 11, обратите внимание, что тут будут и GUID приложений, они идут в столбце «ИД», а так же версия программы.
Если хотите сохранить весь список в текстовый файл, то воспользуйтесь такой конструкцией, не забываем только указать свой путь, где сохранять файл:
winget list > C:templist-app.txt
Вывод списка программ с помощью утилиты WMIC
WMIC.exe — это служебная программа командной строки и оболочки PowerShell, которая используется для доступа к инструментарию управления Windows. Через WMIC можно легко получить список установленных в системе программ, она сделает это через пространство имен WMI, так сказать опросит его. Запускать описанную ниже команду вы можете как через командную строку, так и через PowerShell, я воспользуюсь последним, он выглядит позитивнее:
wmic product get name,version
Вот так будет выглядеть полученный список в виде двух столбцов (Name и Version). Хочу отметить, что обращение к WMI может занимать секунд 30 и более, так что не пугайтесь, что информация не отобразилась сразу.
Для того, чтобы экспортировать полученный список программ, вам нужно использовать вот такую конструкцию:
wmic product get name,version > C:Tempinstall-app.txt
В результате у меня будет сформирован текстовый файл содержащий весь список программ из моей системы Windows 11.
Пре желании вы можете произвести выгрузку и в CSV формате, для это введите:
wmic product get name,version /format:csv > C:Tempinstall-app.csv
Тут еще будет добавлено поле Node, содержащее имя компьютера откуда была произведена выгрузка списка.
Как получить список установленных программ Windows через PowerShell
Я вам не перестаю напоминать, что все, что вы видите в графическом виде операционной системы Windows 10 или Windows 11 имеет свой аналог в виде ключа реестра или ветки. Список установленных приложений в этом не исключение, все данные есть в реестре Windows. Приведу пример, когда вы открываете окно «Программы и компоненты» (Которое можно открыть через оснастку appwiz.cpl)
Или параметрах Windows «Приложения и возможности» , то весь этот список есть в разделе реестра, к которому легко можно обратиться и получить его, в этом и заключается суть метода.
Сам раздел реестра содержащий список программ установленных в Windows 10 или Windows 11 располагается по пути:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionUninstall
Я вам для примера покажу данный раздел, но вы тут мало, что сможете понять, так как тут за место названия приложения идет его GUID, для Windows 11 так проще, машина так понимает лучше, но PowerShell легко это конвертирует в читаемый вид.
В оболочке PowrShell введите команду, которая вам сделает запрос к реестру и вытянет от туда список всех программ, что есть в системе. Нам поможет командлет Get-ItemProperty.
Get-ItemProperty HKLM:SoftwareWow6432NodeMicrosoft WindowsCurrentVersionUninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize
Чтобы сохранить данный список в текстовый файл, то нужно добавить командлет Out-File.
Get-ItemProperty HKLM:SoftwareWow6432NodeMicrosoft WindowsCurrentVersionUninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize | Out-File -FilePath C:Tempinstall-app.txt
Чтобы сохранить данный список в CSV файл, то нужно добавить командлет Out-File или Export-Csv.
Get-ItemProperty HKLM:SoftwareWow6432NodeMicrosoft WindowsCurrentVersionUninstall* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize | Export-CSV -Path C:Tempinstall-app.csv
У PowerShell есть небольшое ограничение по командам указанным выше, так как приложения установленные из магазина Windows не попадают в данную ветку реестра, и чтобы получить их список вам нужно уже запросить список установленных пакетов Windows 11, сказано, сделано:
Get-AppxPackage | Select Name, PackageFullName | Format-Table -AutoSize | Out-File -FilePath C:Tempinstall-app.txt
Ну и напомню использование командлета Get-WmiObject.
Get-WmiObject -Class Win32_Product | Select-Object -Property Name
Как получить список установленного ПО на удаленном компьютере
PowerShell мощная вещь и позволяет легко извлекать информацию с удаленных компьютеров особенно это актуально в средах Active Directory. Предположим у меня есть удаленный компьютер с именем STV2019S01 и я хочу вывести список установленного на него ПО. Для этого выполним команду:
Invoke-command -computer STV2019S01
PowerShell легко может сравнить два списка и показать вам, где есть различия. Я сравню список установленного ПО с компьютера dc01 и svt2019s01. Выполните команду:
Compare-Object –ReferenceObject (Get-Content C:tempinstalled_Applications_dc01.txt) –DifferenceObject (Get-Content C:tempinstalled_Applications_svt2019s01.txt)
Как получить список установленного ПО через функцию PowerShell
Ранее я вам рассказывал, как создать и сохранить функцию PowerShell, вот пример функции для локального и удаленного получения списка установленного ПО в Windows 11.
[Alias(‘name’)] # Helps with ‘Select-Object -ExpandProperty Name’
)
process foreach($computer in $computers)
write-verbose -verbose -message «`nStarting scan on $computer»
Invoke-Command -Computername $computer -ErrorAction SilentlyContinue -ErrorVariable InvokeError -Scriptblock
Get-ChildItem -Path $installPaths | Get-ItemProperty | Sort-Object -Property DisplayName | Select-Object -Property DisplayName, DisplayVersion, Publisher, UninstallString, Version
Write-Warning «Could not communicate with $computer»
> # if ($invokeerror)
> # foreach($computer in $computers)
> # process
> # function Get-InstalledApps
Получение списка установленных программ через стороннее ПО
Сейчас многие программы по оптимизации и удалению ПО способны формировать и показывать список установленных программ. Приведу несколько примеров, первым будет утилита CCleaner которую мы использовали для удаления мусора с компьютера.
- Для получения списка программ Windows в CCleaner переходим в раздел «Инструменты».
- Теперь в правом нижнем углу нажмите кнопку «Сохранить в текстовый файл»
Что самое превосходное, так это то, что CCleaner сохраняет в списке программы установленные из магазина и программы для рабочего стола
Указываем место куда мы сохраним данный файл
Открываем файл и проверяем, что в нем присутствует весь список установленных программ.
Второй утилитой с помощью которой вы легко получите список установленного ПО будет бесплатная UninstallView, которая входит в состав пакета утилит NirLauncher.
Загрузить UninstallView — https://www.nirsoft.net/utils/uninstall_view.html
Когда вы запустите UninstallView вы сразу увидите все программы, что установлены в вашей операционной системе Windows.
Чтобы получить данный список в виде файла, нам необходимо его выгрузить. Для этого выберите в меню «View — HTML Report — All items»
В результате вы получите вот такой удобный список с большим количеством последних столбцов.
На этом у меня все, вы сами можете выбрать удобный для себя метод получения списка установленных программ в Windows 11. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.
Источник: clonehub.org
BootDev
Когда нужно просмотреть информацию о процессах более детально, можно воспользоваться программами на подобии Process Explorer или Process Hacker. А если выбор ограничен? Получить информацию о процессах поможет PowerShell.
Вывод Списка Процессов Системы
Получить информацию о процессах можно с помощью командлета Get-Process . Запускаем PowerShell, и выполняем команду:
# Вывод списка процессов Get-Process
Вывод команды представлен в виде таблицы. По умолчанию выводятся поля: Количество дескрипторов процесса (Handles), Объем невыгружаемой памяти процесса (NPM — Nonpaged System Memory), Объем памяти процесса возможный для записи в файл подкачки (PM — Paged System Memory), Объем памяти процесса выделенный в оперативной памяти (WS — Working Set), Использованное процессорное время (CPU), Имя процесса (ProcessName).
Фильтрация Выводимых Данных
Полученные данные, представляют полный список процессов системы. Что если вам необходимо отслеживать только конкретные процессы. Вывод командлета Get-Process можно отфильтровать используя имя конкретного процесса, или маску имени процесса.
# Вывод всех процессов с именем «browser» Get-Process browser
Теперь все то же самое, но с использованием масок.
# Вывод всех процессов начинающихся на «bro» Get-Process bro*
Для ясности, знак звездочки * , означает любое количество символов, а знак вопросительного знака ? , один любой символ.
Кроме фильтрации по именам процессов, можно отфильтровать и выводимые поля всей таблицы. К примеру, нас интересуют только поля Id, ProcessName, WS. Причем вывод должен быть именно в указанном порядке.
# Вывод указанных полей всех процессов начинающихся на «bro» Get-Process bro* | Select-Object Id, ProcessName, WS
Вывод Дополнительной Информации
Кроме базовых полей (Handles, NPM, PM, WS, CPU, SI, ProcessName) выводимых командлетом Get-Process , существуют еще дополнительные. По умолчанию они не выводятся при выполнении командлета, так как вывод всех полей в виде таблицы, не может поместиться в окне консоли, даже если данное окно развернуть на весь экран. Но отобразить все поля все же можно.
Для примера, выведем все поля процесса winlogon в виде списка.
# Вывод всех полей процесса «winlogon» в виде списка Get-Process winlogon | Format-List *
Как можно заметить, полей довольно-таки много. Причем значение некоторых дублируется, к примеру Name и ProcessName. Это сокращения, для удобства использования.
Дополнительные поля содержат полезную информацию, к примеру:
Составим из этих полей свою версию вывода информации о процессах.
# Вывод указанных полей в виде таблицы Get-Process v*,p*,n* | Format-Table Id, Path, MainWindowT*, Description, Company, ProductVersion
Пользователь Запустивший Процесс
Если вы обратили внимание, то скорее всего заметили, что среди дополнительных полей нет информации о пользователе запустившем конкретный процесс. Вывести данную информацию можно выполнив командлет Get-Process с ключом -IncludeUserName .
# Вывод указанных процессов с информацией о пользователе Get-Process v*,p*,n* -IncludeUserName | Format-Table -AutoSize
Сортировка Вывода
Выполнить сортировку вывода командлета Get-Process можно передав его вывод по конвейеру командлету Sort-Object . К примеру, сортировка по имени процесса, в алфавитном порядке.
# Выполнение сортировки по имени процесса Get-Process | Sort-Object ProcessName
Теперь, отсортируем вывод по полую WS, в порядке убывания. Так мы сможем определить самый прожорливый процесс, он будет первым в списке.
# Выполнение сортировки по используемой оперативной памяти Get-Process | Sort-Object WS -Descending
Вывод Процессов по Условию
Условия, позволяют выбрать из списка всех процессов, те, что удовлетворяют определенным критериям. К примеру выберем из списка процессов, все, объем выделенной памяти для которых больше 50 МБ.
# Вывод процессов объем выделенной памяти для которых больше или равен 50 МБ Get-Process | Where-Object WS -ge 50MB
Вся выборка осуществляется с помощью командлета Where-Object . Если вкратце, данный командлет принимает на вход указанный параметр, и выполняет его сравнение. В данном случае, в качестве параметра выступает поле WS, значение которого должно быть больше или равно 50MB. Данное равенство указывается с помощью параметра -ge (Greater than or equal).
Существуют и другие параметры сравнения: -gt больше, -lt меньше, -eq равно, -ge больше/равно, -le меньше/равно. Подробнее все параметры сравнения, можно посмотреть в справке по командлету Where-Object .
# Вызов онлайн-справки по командлету Where-Object Get-Help Where-Object -online
Вывод Взаимосвязанных Служб
За запущенными процессами, могут скрываться службы. То есть, какой-то из процессов может быть на самом деле запущенной службой. Попробуем вывести такие службы.
# Вывод взаимосвязанных служб с сортировкой по ID процесса Get-WmiObject Win32_Service | Where-Object ProcessId -In (Get-Process svc*).Id | Sort-Object proc* | Format-Table proc*, pathn*, stat*, name*
Команду можно дополнить описанием каждой службы, и сократить ее размер за счет использования алиасов.
# Вывод взаимосвязанных служб с сортировкой по ID процесса gwmi Win32_Service | ? Proc* -In(ps svc*).Id | sort proc* | ft proc*, pathn*, stat*, name*, des*
Закрытие Процессов
Научившись фильтровать необходимые процессы, можно с ними можно выполнять различные действия. К примеру можно их закрыть.
Допустим в системе запущено 4 процесса notepad и 1 notepad++.
Закрыть 4 обычных блокнота, можно передав отфильтрованный список командлету Stop-Process .
# Закрыть все процессы «notepad» Get-Process notepad | Stop-Process
Вывод Взаимосвязанных Модулей
Получить список модулей используемых процессом, можно с помощью поля Modules. Желательно выводить данное поле для конкретно отдельного процесса, так как вывод данного свойства для всех процессов, выведет общий список всех используемых модулей.
# Вывод взаимосвязанных модулей процесса «x64dbg» (get-process x64dbg).Modules
Если внимательно посмотреть на список модулей, то можно увидеть загруженные библиотеки DLL находящиеся в одной папке с исполняемым файлом.
Итог
В статье было рассмотрено: Как вывести список процессов в PowerShell? Как выполнить сортировку процессов в PowerShell? Как вывести взаимосвязанные службы процессов в PowerShell? Как вывести взаимосвязанные модули процесса в PowerShell? Как отфильтровать список процессов в PowerShell?
Как вывести процессы по заданному условию в PowerShell?
Источник: www.bootdev.ru