2016-06-28 14 views
1

Ich habe ein Array mit 3 Elementen (Feature) in meinem Code. ZZ habe ich sie als $feature = "System","Battery","Signal","Current"; erklärt, aber in Zukunft kann es mehr Eigenschaften geben. Also dachte ich über eine Option in meinem Code nach, um ein neues Feature hinzuzufügen (implementiert als GUI) und den $feature.Add("$new_feature") Befehl zu verwenden.Anfügen eines Arrays mit Powershell

Dies funktioniert perfekt für diesen bestimmten Lauf des Skripts. Aber wenn ich das Skript erneut ausführe, wird dieses neue Feature nicht angezeigt. Wie kann ich dieses Problem lösen, so dass, wann immer ein neues Feature hinzugefügt wird, es für immer im Skript bleiben wird?

Ist das möglich?

+1

Sie wollen die Daten in einem Lauf hinzugefügt werden, auch angezeigt, wie noch in den folgenden Läufen vorhanden? Klingt so, als müssten Sie in einen separaten Datensatz schauen, in dem alle möglichen Werte zwischen den einzelnen Durchläufen gespeichert werden. Auch, $ feature + = $ new_feature' – gravity

+1

Ein Skript erinnert sich nicht daran, was beim letzten Mal passiert ist. Sie müssen alle Daten speichern, die beim nächsten Ausführen des Skripts verfügbar sein sollen. –

Antwort

1

wäre der einfachste Ansatz sein, um die Array-Daten in einer Datei zu speichern:

# read array from file 
$feature = @(Get-Content 'features.txt') 

# write array back to file 
$feature | Set-Content 'features.txt' 

Sie $PSScriptRoot verwenden können den Speicherort der Skriptdatei zu erhalten (so können Sie die Datendatei im selben Ordner speichern) . Vor der Powershell v3 den folgenden Befehl zu verwenden, um die Ordner mit dem Skript zu bestimmen:

$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent 

Eine weitere Möglichkeit, die Daten in der Registrierung zu speichern ist (einfacher, die Daten zu lokalisieren, aber ein wenig komplizierter zu handhaben):

$key = 'HKCU:\some\key' 
$name = 'features' 

# read array from registry 
$feature = @(Get-ItemProperty -Path $key -Name $name -EA SilentlyContinue | Select-Object -Expand $name) 

# create registry value if it didn't exist before 
if (-not $?) { 
    New-ItemProperty -Path $key -Name $name -Type MultiString -Value @() 
} 

# write array back to registry 
Set-ItemProperty -Path $key -Name $name -Value $feature 
+0

Hi Ansgar, gibt es einen Unterschied zwischen der Verwendung von 'Split-Path $ MyInvocation.MyCommand.Path -Parent' und ' Split-Path $ MyInvocation.MyCommand.Definition' als '$ PSScriptRoot' in PS2.0? – sodawillow

+0

@sodawillow '$ MyInvocation.MyCommand.Path' und' $ MyInvocation.MyCommand.Definition' sind praktisch identisch (der vollständige Pfad zum Skript). 'Split-Path -Parent' ist eine Möglichkeit, den übergeordneten Ordner aus diesem Pfad zu extrahieren. –

+0

@ Ansgar Wiechers .. Danke !!! Dies löste meine Anfrage .... – krishna