#Объявляем функцию содержащую способ вывода и сорт. по свойству DisplayName.
function Grid-Output
{
param (
<#
Объявляем, что наличие массива элементов указанного ниже для работы
данной функции явлется строго обязательным
#>
[Parameter (Mandatory = $true)]
[Array] $Massive
)
<#
Сортируем вывод по свойству DisplayName, далее указываем формат вывода
GridView
#>
$Massive |sort-object -property DisplayName | Out-GridView
}
<#
Получаем объекты из реестра.
На данном этапе из реестра мы получ. объекты типа:
System.MarshalByRefObject.RegistryKey (Microsoft.Win32.RegistryKey)
Отдельный объект для этих целей был создан потому что:
1.Возможно данный объект, в последующем, необходимо будет изменить.
Скорее всего даже на функцию анализирующую массивы
элементов описанных ниже, формируя единый массив:
1.1: $soft = Get-WmiObject -Class Win32_Product
1.2: $soft32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
1.3: $soft64 = gci "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
В связи с этим мы изолируем его для упрощения последующих модификаций.
2. Улучшает читабельность кода.
#>
[array]$RegUnistValues = Get-ChildItem HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
<#
Генерируем объекты Automation.PSCustomObject для каждого свойства полученных ранее объектов Win32.RegistryKey
Более подр. информацию по Get-ItemProperty можно почитать тут:
https://technet.microsoft.com/ru-ru/library/hh8498...
#>
[String]$temp = 'Здесь будут временно содержаться значения'
[Array]$temp = $RegUnistValues | ForEach-object {(Get-ItemProperty Microsoft.PowerShell.Core\Registry::$_)}
#вывод полученных данных с помощью ранее написанной функции Grid-Output
Grid-Output -Massive ($temp | Select-Object -Property DisplayName, DIsplayVersion, PSChildName | Export-Csv -Path c:\temp\$env:COMPUTERNAME.csv)
#Обнуляем значение, дабы не оставлять после себя артефактов со значениями реестра.
[String]$RegUnistValues = 'Здесь содержались значения реестра'
[String]$temp = 'Здесь временно содержались значения'
<#
Блокируем автоматическое закрытие окна PowerShell после выполнения скрипта. В данном конкретном случае,
мне необходимо было сделать именно таким образом, однако правильнее будет запустить скрипт с ключом:
powershell.exe -NoExit -command c:\myscript.ps1
Ибо вносить для этого отдельные изменения в сценарий не рекомендуется.
#>
$host.ui.RawUI.ReadKey(6)|out-null