Скрипт Powershell проверяет версии приложений на нескольких машинах. - PullRequest
0 голосов
/ 01 ноября 2018

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

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

$InstalledApps = gwmi Win32Reg_AddRemovePrograms64 | Select DisplayName, Publisher, Version

$InstalledApps += 
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -Command {gwmi Win32Reg_AddRemovePrograms | Select DisplayName, Publisher, Version}

$InstalledApps = $InstalledApps | sort displayname | Get-Unique -AsString

$InstalledApps| Select DisplayName, Publisher, Version | ogv -PassThru | export-csv .\apps.csv

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Да, это также возможно при использовании WMI, однако я бы посоветовал вам взглянуть на миграцию вызовов WMI на CimInstance, вместо этого используя Powershell v.3 и выше, поскольку WMI является устаревшим и не очень дружественным к брандмауэру, как, например, CimInstance. Но вот код для использования WMI.

#Define a Table Array
$MasterTable = @()

#Define computer list
$Computerlist = "computer1", "computer2"

#Run Foreach to retrieve data from each computer remotely
Foreach ($computer in $Computerlist) {
$MasterTable += Get-WmiObject -Class Win32_Product -Computername $Computer |   
    Select-Object @{Name = "Computername"; Expression = {$Computer}}, 
    @{Name = "SoftwareName"; Expression = {$_.Caption}}, 
    @{Name = "Publisher"; Expression = {$_.Vendor}},
    @{Name = "Version"; Expression = {$_.Version}} 
}

$MasterTable | export-csv c:\temp\apps.csv -NoTypeInformation -Append
0 голосов
/ 01 ноября 2018

Powershell v3. и выше.

Попробуйте по возможности использовать CimInstance вместо WMI.

#Define a Table Array
$MasterTable = @()

#Define computer list
$Computerlist = "computer1", "computer22"

#Run Foreach to retrieve data from each computer remotely
Foreach ($computer in $Computerlist) {
$MasterTable += Get-CimInstance win32_product -Computername $Computer |   
    Select-Object @{Name = "Computername"; Expression = {$Computer}}, 
    @{Name = "SoftwareName"; Expression = {$_.Caption}}, 
    @{Name = "Publisher"; Expression = {$_.Vendor}},
    @{Name = "Version"; Expression = {$_.Version}} 
}

$MasterTable | export-csv .\apps.csv -NoTypeInformation -Append

Это должно дать вам один CSV-экспорт с четырьмя столбцами, содержащими всю необходимую вам информацию (включая имя компьютера, с которым был запущен Get-CimInstance).

Вы можете сделать некоторую дополнительную логику с переменной MasterTable, если хотите, перед экспортом в CSV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...