J'essaie de créer un objet avec des propriétés identiques au code ci-dessous. Le bit de code suivant crée l'objet TempValueICM $ avec 2 ajouté NoteProperties:Problème lors de l'obtention des propriétés et de la structure correcte de l'objet
$TempValueICM = Invoke-Command -ComputerName $computer -ScriptBlock {
$AppPull = Get-ItemProperty HKLM:\software\Microsoft\Windows\CurrentVersion\Uninstall\* |
Select-Object DisplayName, DisplayVersion}
Il crée temptValueICM $ comme un objet de tableau avec NoteProperties de DisplayName et la version d'affichage qui apparaissent comme ceci:
DisplayVersion: 4,92. 12,0
DisplayName: Conexant 20561 SmartAudio HD
DisplayVersion:
Di splayName: Connection Manager
DisplayVersion:
DisplayName: MouseSuite98
...
Je suis en train de tirer les mêmes données à l'aide tirer .NET avec le code suivant:
$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
}
}
}
Cela produit des données de table de hachage et je peux obtenir des informations et y accéder en utilisant la notation par points (par exemple - "$ TempValue.DisplayName") mais en regardant l'objet il montre seulement "keys" et "values" comme propriétés d'objet pour l'objet $ TempValue au lieu de ce que je voudrais être les noms de propriété (par exemple - DisplayName et DisplayVersion) .
J'ai essayé de créer une variable temporaire dans la fonction pour conserver les données en tant que propriétés, par ex. -
$Temp = "" | select DisplayName, DisplayVersion
$Temp.DisplayName += ,$DisplayName
$Temp.Publisher += ,$Publisher
$Temp.DisplayVersion += ,$DisplayVersion
Mais cela ne le fait pas ...
Plus précisément je vais finalement avoir à faire un tri -properties objet sur elle et la nécessité de la logique pour les deux fonctions soient les mêmes (c'est-à-dire que les données peuvent provenir de l'une ou l'autre logique dans le même format, de manière à ce qu'elles puissent être traitées de la même manière
Comment obtenir l'objet formaté pour que la même information soit disponible de la même manière que le $ TempValueICM ci-dessus ci-dessus (ie - comment puis-je obtenir les éléments dans la table de hachage pour remplir les propriétés sur l'objet)? Merci,
Oui, je peux le faire fonctionner, il donne juste un objet qui n'est pas comme le code en haut. Les deux objets finissent par être System.arrays mais le haut produit un élément avec des propriétés correspondant aux éléments de l'instruction "Select" et le bas ne le fait pas (Il répertorie "Keys" et "Values" comme propriétés au lieu de "DisplayName" –
J'ai oublié de mentionner ci-dessus que spécifiquement je devrai éventuellement faire un tri-objet-propriétés sur elle et besoin de la logique pour les deux fonctions pour être le même –
Edited la réponse pour retourner un tableau d'objets.J'espère avoir compris votre but correctement. – user6530384