marcimarc85
Goto Top

Powershell bestimmten Wert aus Ausgabe "ausschneiden"

Hallo,

Ich bekomme mit der Powershell Abfrage :

Get-ChildItem HKCU:\Software\AppTool\Tool\|Format-List

folgendes Ergebnis ausgegeben:

Property      : {last_install_path, license_file_from, AppTool-12.2.5-x64_path, AppTool-12.2.5-x64_shortcuts}
PSPath        : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\AppTool\Tool\V12
PSParentPath  : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\AppTool\Tool
PSChildName   : V12
PSDrive       : HKCU
PSProvider    : Microsoft.PowerShell.Core\Registry
PSIsContainer : True
SubKeyCount   : 3
View          : Default
Handle        : Microsoft.Win32.SafeHandles.SafeRegistryHandle
ValueCount    : 4
Name          : HKEY_CURRENT_USER\Software\AppTool\AppTool\V12

Nun möchte ich die Ausgabe so "beschneiden", dass ich als ergebnis nur noch AppTool-12.2.5 bekomme und das "-" soll durch ein Leerzeichen ersetzt werden.

Hintergrund ist, dass ich immer die aktuellste Version des Tool ausgelese haben möchte , um das in einem Monitoring Tool anzuzeigen/zu überwachen.

ich bedanke mich schonmal für die Hilfe!

Content-Key: 386371

Url: https://administrator.de/contentid/386371

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: 137084
Lösung 137084 13.09.2018 aktualisiert um 15:40:08 Uhr
Goto Top
Get-ItemProperty 'HKCU:\Software\AppTool\Tool' -Name AppTool* | gm -MemberType NoteProperty -Name AppTool* | select -First 1 | %{$_.Name -replace '^(AppTool)-([^-]+).*','$1 $2'}  
oder
(get-Item 'HKCU:\Software\AppTool\Tool').Property | ?{$_ -match '(AppTool)-([^-]+)'} | select -First 1 | %{"$($matches[1]) $($matches[2])"}  
Mitglied: MarciMarc85
MarciMarc85 14.09.2018 um 08:04:16 Uhr
Goto Top
Guten Moregn.

Erstmal vielen Dank für deine Hilfe! Also beim ersten Befehl bekomme ich folgende Fehlermeldung:

gm : Sie müssen ein Objekt für das Cmdlet "Get-Member" angegeben.  
In Zeile:1 Zeichen:65
+ ... Sys\' -Name Apptool* | gm -MemberType NoteProperty -Name AppTool* | selec ...  
+                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand


Beim zweiten Befehl bekomme ich keinen Fehler. Da wird erst garnichts ausgegeben. erst , wenn ich den Suchpfad von :

HKCU:\Software\AppTool\Tool

auf

HKCU:\Software\AppTool\Tool\V12

ändere, bekomme ich die Ausgabe, so wie ich sie will. Das "V12" kann ich aber nicht mit angeben, da er verschiedene Versionsnummern gibt und da dann auch "V10" oder "V11" stehen kann.
Der Suchpfad müsste also auf jeden Fall "HKCU:\Software\AppTool\Tool" bleiben.

Kannst du mir da noch weiterhelfen?
Mitglied: MarciMarc85
MarciMarc85 14.09.2018 um 08:07:45 Uhr
Goto Top
Sorry,

Hab es hinbekommen.

Mit HKCU:\Software\AppTool\Tool\* klappt es

Danke vielmals
Mitglied: 137084
137084 14.09.2018 aktualisiert um 08:34:07 Uhr
Goto Top
Naja, beide Funktionen gehen einwandfrei. Vorraussetzung ist eben das du den richtigen Registry-Pfad angibst, wenn du hier selbst den falschen Pfad postest kann man nicht viel mehr machen.

Bitte dann noch auf gelöst setzen.
Mitglied: MarciMarc85
MarciMarc85 14.09.2018 um 12:35:43 Uhr
Goto Top
Könntest du mir noch einen Tipp geben?

Bei der Abfrage
(get-Item 'HKCU:\Software\AppTool\Tool').Property | ?{$_ -match '(AppTool)-([^-]+)'} | select -First 1 | %{"$($matches[1]) $($matches[2])"}  

Kommt AppTool 12.0.54 raus. Das ist gut so, da dass Ersetzen des "-" funktioniert.
Was müsste man noch an der Syntax ändern, damit ich zusätzlich das Wort "Client" mit in die Ausgabe bekomme?:


AppTool Client 12.0.54

So sollte es dann aussehen
Mitglied: 137084
137084 14.09.2018 aktualisiert um 12:37:38 Uhr
Goto Top
In der Foreach-Schleife am Ende wird die Ausgabe gesteuert
(get-Item 'HKCU:\Software\AppTool\Tool').Property | ?{$_ -match '(AppTool)-([^-]+)'} | select -First 1 | %{"$($matches[1]) Client $($matches[2])"}