2016-06-28 5 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을 사용할 수 있습니다

(그래서 당신은 동일한 폴더에 데이터 파일을 저장할 수 있습니다) .

는 또 다른 옵션은 레지스트리에 데이터를 저장하는 것입니다
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent 

(쉽게 데이터를 찾을 수 있지만, 좀 더 복잡한 처리) : PowerShell을하기 전에 스크립트가 포함 된 폴더를 확인하려면 다음 명령을 사용 v3의

$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

안녕하세요 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

관련 문제