none
Registry Wert auslesen und anpassen RRS feed

  • 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
    Donnerstag, 11. September 2014 05:21

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


    • Bearbeitet O.Schwarz Donnerstag, 11. September 2014 18:21 Nachtrag
    • Als Antwort markiert tonibert Sonntag, 14. September 2014 15:36
    Donnerstag, 11. September 2014 18:16
  • 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
    Sonntag, 14. September 2014 15:33

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
    Donnerstag, 11. September 2014 05:51
  • 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

    http://blogs.technet.com/b/heyscriptingguy/archive/2012/05/12/weekend-scripter-use-powershell-to-easily-modify-registry-property-values.aspx


    Seidl Michael | http://www.techguy.at | twitter.com/techguyat | facebook.com/techguyat

    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

    Donnerstag, 11. September 2014 16:18
  • 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


    • Bearbeitet O.Schwarz Donnerstag, 11. September 2014 18:21 Nachtrag
    • Als Antwort markiert tonibert Sonntag, 14. September 2014 15:36
    Donnerstag, 11. September 2014 18:16
  • 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
    Sonntag, 14. September 2014 15:33