我正在尝试创建一个属性与下面的代码相同的对象。以下代码创建了 $TempValueICM 对象,并添加了 2 个 NoteProperties:
$TempValueICM = Invoke-Command -ComputerName $computer -ScriptBlock {
$AppPull = Get-ItemProperty HKLM:\software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion}
它创建 $temptValueICM 作为数组对象,其 NoteProperties 为 DisplayName 和 Display version,如下所示:
显示版本:4.92.12.0
显示器名称:科胜讯 20561 SmartAudio HD
显示版本:
显示名称:连接管理器
显示版本:
显示名称:MouseSuite98
...
我正在尝试使用 .NET pull 使用以下代码提取相同的数据:
$Hive = [Microsoft.Win32.RegistryHive]::LocalMachine
$AppAddressMain = "software\Microsoft\Windows\CurrentVersion\Uninstall\"
$AppAddressWOW = "software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
Function Get-InstalledApps {
param ($MainHive, $Computer, [string[]]$RegAddress)
Foreach($Address in $RegAddress) {
$RegBaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($MainHive, $computer)
$RegSubKey= $RegBaseKey.OpenSubKey($Address)
foreach($Subkey in $RegSubKey.GetSubKeyNames()){
$AppAddress = $Address + $Subkey
$DisplayName = $($RegBaseKey.OpenSubKey($AppAddress)).GetValue("DisplayName")
$DisplayVersion = $($RegBaseKey.OpenSubKey($AppAddress)).GetValue("DisplayVersion")
Write-Output @{
DisplayName = $DisplayName
DisplayVersion = $DisplayVersion
}
}
}
这会产生一个哈希表数据,我可以获取一些信息并使用点表示法访问它(例如 - “$TempValue.DisplayName”),但是在查看对象时,它只显示“键”和“值”作为对象属性对于 $TempValue 对象,而不是我想要的属性名称(例如 - DisplayName 和 DisplayVersion)。
我尝试在函数中创建一个临时变量来将数据保存为属性,例如 -
$Temp = "" | select DisplayName, DisplayVersion
$Temp.DisplayName += ,$DisplayName
$Temp.Publisher += ,$Publisher
$Temp.DisplayVersion += ,$DisplayVersion
但这并没有...
具体来说,我最终将不得不对其进行 sort-object -properties 并且需要两个函数的逻辑相同(即 - 以便数据可以来自相同格式的任一“逻辑”,因此可以对其进行处理同样的方法。
如何格式化对象,以便以与上面的 $TempValueICM 相同的方式提供相同的信息(即,如何获取哈希表中的项目以填充对象的属性)?谢谢,