2016-06-28 111 views
1

我的代碼中有一個包含3個元素(特徵)的數組。目前我已經宣佈他們爲$feature = "System","Battery","Signal","Current"; 但未來可能會有更多功能。所以我想在我的代碼中添加一個選項來添加新功能(作爲GUI實現)並使用$feature.Add("$new_feature")命令。使用powershell追加數組

這對於腳本的特定運行是完美的。但是當我再次運行腳本時,這個新增功能並未出現。我如何解決這個問題,以便在添加新功能時,它將永遠保留在腳本中?

這可能嗎?

+1

您希望將數據添加到一次運行中,並且在隨後的運行中顯示爲仍然存在?聽起來就像你需要查看一個單獨的數據集,在每個運行之間保留所有可能的值。另外,'$ feature + = $ new_feature' – gravity

+1

腳本不記得上次運行時發生了什麼。您必須在下次運行腳本時存儲任何想要使用的數據。 –

回答

1

最簡單的方法是將數組數據存儲在一個文件中:

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

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

您可以使用$PSScriptRoot獲取腳本文件的位置(這樣你就可以存儲在同一文件夾中的數據文件) 。在此之前的PowerShell v3可使用以下命令來確定包含腳本的文件夾:

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

另一種選擇是將數據存儲在註冊表中(更容易找到數據,卻多了幾分複雜的處理):

$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,在PS2.0中使用'Split-Path $ MyInvocation.MyCommand.Path -Parent'和 'Split-Path $ MyInvocation.MyCommand.Definition'作爲'$ PSScriptRoot'是否有區別? – sodawillow

+0

@sodawillow'$ MyInvocation.MyCommand.Path'和'$ MyInvocation.MyCommand.Definition'實際上是相同的(腳本的完整路徑)。 'Split-Path -Parent'是從該路徑中提取父文件夾的一種方法。 –

+0

@ Ansgar Wiechers ..謝謝!!!這解決了我的查詢.... – krishna