Benutzer mit den meisten Antworten
Registry Wert auslesen und anpassen

Frage
-
Hallo zusammen!
Ich bin auf der Suche nach einer Möglichkeit um einen Pfad in der Registry auszulesen und anzupassen
Unter HKLM\Software\Classes\Installer\Products
liegen eine ganze Reihe von hinterlegten Installationspfaden...
Darin gibt es einen Eintrag LastUsedSource und der enthält einen der unteren Einträge....den würde ich gerne anpassen!
Da ich Office von einem bestimmten Server installiert habe würde ich gerne
in dieser Strukturn nach dem alten Pfad suchen und den Pfad ersetzten
\\Server1\...\...\...\Office2003 mit \\Server2\Office$\Office2003
\\Server1\...\...\...\Office2007 mit \\Server2\Office$\Office2007
\\Server1\...\...\...\Office2010 mit \\Server2\Office$\Office2010
Alles was ich bisher probiert habe will leider nicht funktionieren..
Ich freue mich auf eure Ideen :-)
Gruß Toni
- Bearbeitet tonibert Donnerstag, 11. September 2014 05:23
Antworten
-
Hallo Toni,
ok, hier auch noch ein Ansatz;
(Michael hat ja auch schon Get-ItemProperty ins Spiel gebracht)
Vll. hilft dir das hier auch weiter:PS C:\Users\Oliver> get-ItemProperty 'HKLM:\Software\Classes\Installer\Products\*\SourceList' | select-Object | where {$_.PackageName -like 'Office*'} PackageName : OfficeMUISet.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0115-0409-0000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109511090400000000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109511090400000000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : Office64MUISet.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0116-0409-1000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109611090400100000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109611090400100000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : Office64WW.msi LastUsedSource : n;1;C:\MSOCache\All Users\{91150000-0011-0000-0000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20000000100000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20000000100000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : Office64MUI.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0116-0409-1000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20090400100000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20090400100000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : OfficeMUI.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0115-0409-0000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109E60090400000000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109E60090400000000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry
Wenn du noch weiter filtern willst, schreib dir die Ausgabe in eine Variable. Kannst es natürlich auch in ein xml oder txt File schreiben. Musst dann halt wieder einlesen...
Und zum schreiben nimm dann "Set-ItemProperty" und wenn du das gleich automagisch ändern willst, bau dir eine "If" Schleife. (Wenn Value LastUsedSource = Path bla dann Set-ItemProperty neuer Path)
Hoffe du kommst damit weiter.
Es gibt bestimmt schönere Lösungen, aber dann müssten sich mal die PS Götter zu Wort/Schrift melden ;)
Grüße
Olli -
Hallo,
ich konnte es mit dem folgenden Code dann lösen!
$REPLACE = get-ItemProperty 'HKLM:\Software\Classes\Installer\Products\*\SourceList\Net' | select-Object | where {$_.LastUsedSource -like '\\server1*'} If ($REPLACE.LastUsedSource -like '\\Server1\*\setup.exe') {Set-ItemProperty -Path $REPLACE.PSPath -Name LastUsedSource -Value '\\server2\Ordner\Ordner\setup.exe'}
Ich danke euch!!Gruß Toni
- Als Antwort markiert tonibert Sonntag, 14. September 2014 15:35
Alle Antworten
-
Morgen Toni,
schon mal get-ChildItem (set-ChildItem) und get-ItemProperty (set-ItemProperty) agenschaut.
So in der Art:
get-Childitem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' | fl
Du kannst natürlich auch pipen und und suchen ;)
Grüße
Olli- Bearbeitet O.Schwarz Donnerstag, 11. September 2014 05:52 Nachtrag
-
Hallo
anbei ein kleines Powershell Script zu auslesen der Werte
$Reg="HKLM:Software\Classes\Installer\Products" $Subs=Get-ChildItem -Path $Reg foreach ($Entry in $Subs) { $Path = $Reg +"\" + $Entry.PSChildName + "\SourceList" if (Test-Path -Path $Path){ Get-ItemProperty -Path $Path -Name LastUsedSource | select LastUsedSource } }
Und hier ein Link mit ein paar Informationen
Seidl Michael | http://www.techguy.at | twitter.com/techguyat | facebook.com/techguyat
- Als Antwort vorgeschlagen Michael Seidl (MVP)MVP Donnerstag, 11. September 2014 10:38
-
Hallo Olli, hallo Michael,
erst mal vielen Dank!
@Olli an get-childitem etc. hab ich mich schon probiert...komm aber nicht zum Ziel...im Moment
@Michael Danke, für den sehr guten Link und das Script!
Wie kann ich die Ergebnisse aber nun nach meinen Officelinks durchsuchen und mit meinem Pfad ersetzen?
Ich werde jetzt erst mal etwas rumtesten....
Gruß Toni
-
Hallo Toni,
ok, hier auch noch ein Ansatz;
(Michael hat ja auch schon Get-ItemProperty ins Spiel gebracht)
Vll. hilft dir das hier auch weiter:PS C:\Users\Oliver> get-ItemProperty 'HKLM:\Software\Classes\Installer\Products\*\SourceList' | select-Object | where {$_.PackageName -like 'Office*'} PackageName : OfficeMUISet.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0115-0409-0000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109511090400000000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109511090400000000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : Office64MUISet.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0116-0409-1000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109611090400100000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109611090400100000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : Office64WW.msi LastUsedSource : n;1;C:\MSOCache\All Users\{91150000-0011-0000-0000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20000000100000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20000000100000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : Office64MUI.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0116-0409-1000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20090400100000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109A20090400100000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PackageName : OfficeMUI.msi LastUsedSource : n;1;C:\MSOCache\All Users\{90150000-0115-0409-0000-0000000FF1CE}-C\ PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109E60090400000000000F01FEC\SourceList PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\00005109E60090400000000000F01FEC PSChildName : SourceList PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry
Wenn du noch weiter filtern willst, schreib dir die Ausgabe in eine Variable. Kannst es natürlich auch in ein xml oder txt File schreiben. Musst dann halt wieder einlesen...
Und zum schreiben nimm dann "Set-ItemProperty" und wenn du das gleich automagisch ändern willst, bau dir eine "If" Schleife. (Wenn Value LastUsedSource = Path bla dann Set-ItemProperty neuer Path)
Hoffe du kommst damit weiter.
Es gibt bestimmt schönere Lösungen, aber dann müssten sich mal die PS Götter zu Wort/Schrift melden ;)
Grüße
Olli -
Hallo,
ich konnte es mit dem folgenden Code dann lösen!
$REPLACE = get-ItemProperty 'HKLM:\Software\Classes\Installer\Products\*\SourceList\Net' | select-Object | where {$_.LastUsedSource -like '\\server1*'} If ($REPLACE.LastUsedSource -like '\\Server1\*\setup.exe') {Set-ItemProperty -Path $REPLACE.PSPath -Name LastUsedSource -Value '\\server2\Ordner\Ordner\setup.exe'}
Ich danke euch!!Gruß Toni
- Als Antwort markiert tonibert Sonntag, 14. September 2014 15:35