Jump to content

Registry-Values hinzufügen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

ich sehe leider den Wald vor lauter Bäumen nicht...

 

Ich habe ein Script das in der Registry überprüft ob es einen bestimmten Pfad und bestimmte Schlüssel gibt. Wenn es den Pfad oder Schlüssel nicht gibt werden sie angelegt. Funktioniert soweit problemlos.

 

Wenn die Schlüssel schon da sind, sollen den Feldern (wenn sie leer sind) Werte übergeben werden. Wenn bereits was drin steht, sollen Werte *hinzugefügt* werden, der bisherige Inhalt muss also erhalten bleiben.

Das ganze über zwei Arrays. Eins für die Schlüssel, eins für die Werte die den Schlüsseln zugeordnet werden sollen.

 

Nur das hinzufügen klappt nicht. Leider habe ich von der Powershell noch nicht wirklich viel Ahnung und tappe komplett im dunkeln...

 

# Set parameters
$pathVGOC="HKLM:\SOFTWARE\VGOC"
$pathOPSMGR="HKLM:\SOFTWARE\VGOC\OperationsManager"
$value="key1","key2","key3","key4","key5"
$data="t1","t2","t3","t4","t5"

# Function which can be called to add the values defined before
function addValues
{
for ($i = 0; $i -lt $value.length ; $i++)
{
	if (Get-ItemProperty -name $value[$i] -path $pathOPSMGR -erroraction silentlycontinue) 
	{ 
		# Get current value
		$a = Get-ItemProperty $pathOPSMGR -name $value[$i]
		# Change value (adds the variable $value[$i])
		$a.$value[$i] = $a.$value[$i] + ";" + $data[$i]
		# Write value
		Set-ItemProperty -name $value[$i] -path $pathOPSMGR $a.$value[$i]
	}
	else
	{
		New-ItemProperty $pathOPSMGR -name $value[$i] -value $data[$i] -propertytype "String"
	}
}
}


if (Test-Path $pathVGOC)
{
Write-Host "Path exists:" $pathVGOC
if (Test-Path $pathOPSMGR) 
{
	Write-Host "Path exists:" $pathOPSMGR
	addValues
}
else 
{
	New-Item –path $pathVGOC -name "OperationsManager"
	Write-Host "Path created:" $pathOPSMGR
	addValues
}
}
else 
{
New-Item –path "HKLM:\SOFTWARE" -name "Voith Group of Companies TEST"
Write-Host "Path created:" $pathVGOC
New-Item –path $pathVGOC -name "OperationsManager"
Write-Host "Path created:" $pathOPSMGR
addValues
}

 

Vielleicht mag das jemand mal testen, und zwar ZWEIMAL hintereinander. Beim ersten Mal werden die Werte im Pfad angelegt und die Werte geschrieben. Beim zweiten Mal sollten die Werte erweitert, also hinzugefügt werden, ohne dass die ersten überschrieben werden. (In dem Beispiel müsste also die Werte nach dem zweiten Durchlauf doppelt vorhanden sein. In der Realität kann es vorkommen, dass die Schlüssel einfach schon da sind und fremde Werte drin stehen, die auf jeden Fall erhalten bleiben müssen und nur durch die im Skript erweitert).

 

Nachtrag: Das die Funktion einen Fehler produziert ist mir bewusst ;-) Ich habe nur keine Ahnung wie ich das angehen muss damit es funktioniert wie ich es mir vorstelle.

Link zu diesem Kommentar

Hallo,

So kann das nicht funktionieren:

 

$a ist ein Hash. Mit $a.key1 kann man sich den zugehörigen Wert in der Hashtablle auslesen. Allerdings kannst du "key1" nicht, zumindest nicht direkt als Parameter übergeben. $a.$value[1] geht nicht

 

Mit einem Scriptblock kann aber ein solches Konstrukt erreichen:

 

Codefragment:

$ScriptBlock={
$a.$args[0] = $args[0] + ";" 
}

$value[1] | foreach{
$($ScriptBlock.Invoke($_))
}

 

Im Skriptblock übergibst du den Wert $value[$i] an den Parameter $args[0] und der wird dann als Codetext interpretiert.

 

Ich habe jetzt einige zeit versucht, deine Aufgabe zu lösen. So ganz geschafft habe ich es leider nicht. Vielleicht hilft dir der Ansatz oben weiter.

 

blub

Link zu diesem Kommentar
  • 2 Wochen später...

Hallo Alsion,

 

wie Blub schon schreibt, ist hier ein Hashtable das Mittel der Wahl. Ich habe dir mal eine "Quick & Dirty Lösung" niedergeschrieben.

Bei einem Hashtable wird einem Key ein Wert zugewiesen. Dieser Hashtable kann am besten mit einer foreach Schleife durchlaufen werden, diese ist speziell für Arrays und Hashtables gedacht.

 

$path="HKCU:\Software\test"
$hash=@{key1="value1"; key2="value2"; key3="value3"}

foreach ($key in $hash.Keys)
{
   If (Get-ItemProperty -Path $path -Name $key)
 {
 	$RegValue = Get-ItemProperty -Path $path -Name $key
	$RegValue = $RegValue.$key
	If ($RegValue)
	{
		$HashValue = $hash.get_Item($key)
		Set-ItemProperty -Path $path -Name $key -Value "$RegValue;$HashValue"
	}
	Else
	{
		New-ItemProperty -Path $path -Name $key -Value "$HashValue"
	}
 }
}

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...