PowerShell 스크립트와 함께 구성 파일 (ini, conf,…)을 사용하는 방법은 무엇입니까?


14

PowerShell 스크립트와 함께 구성 파일을 사용할 수 있습니까?

예를 들어, 구성 파일 :

#links
link1=http://www.google.com
link2=http://www.apple.com
link3=http://www.microsoft.com

그런 다음 PS1 스크립트에서이 정보를 호출하십시오.

start-process iexplore.exe $Link1

답변:


17

데니스와 팀을 도와 주셔서 감사합니다! 당신의 대답은 나를 잘 따라 잡았고 나는 이것을 찾았 습니다.

설정 .TXT

#from http://tlingenf.spaces.live.com/blog/cns!B1B09F516B5BAEBF!213.entry
#
[General]
MySetting1=value

[Locations]
InputFile="C:\Users.txt"
OutputFile="C:\output.log"

[Other]
WaitForTime=20
VerboseLogging=True

파워 쉘 명령

#from http://tlingenf.spaces.live.com/blog/cns!B1B09F516B5BAEBF!213.entry
#
Get-Content "C:\settings.txt" | foreach-object -begin {$h=@{}} -process { $k = [regex]::split($_,'='); if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { $h.Add($k[0], $k[1]) } }

그때

코드 스 니펫을 실행 한 후 변수 ($ h)에는 HashTable의 값이 포함됩니다.

Name                           Value
----                           -----
MySetting1                     value
VerboseLogging                 True
WaitForTime                    20
OutputFile                     "C:\output.log"
InputFile                      "C:\Users.txt"

* 표에서 항목을 검색하려면 다음 명령을 사용하십시오. $h.Get_Item("MySetting1").*


4
또한 훨씬 우호적의 $의 h.MySetting1하여 설정을 얻을 수 있습니다
라이언 Shillington

이 답변에 표시된 것과 동일한 .txt 파일과 파서 코드 (변경 사항 없음)를 사용하더라도 정규 표현식 파서 줄에서 범위를 벗어난 예외가 발생합니다. => Index was outside the bounds of the array. At C:\testConfigreader.ps1:13 char:264 + ... -ne $True)) { $h.Add($k[0], $k[1]) } } + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException + FullyQualifiedErrorId : System.IndexOutOfRangeException누구든지 올바르게 작동합니까?
Shiva

설정 파일에 [Sections]또는 이 없으면 ; semicolon comments, 그냥 할 수 있습니다 $config = Get-Content $ConfigPath | ConvertFrom-StringData. 자세한 내용은 ConvertFrom-StringData 를 참조하십시오.
asmironov 2016 년

4

여기 에이 코드를 보여주는 좋은 스레드가 있습니다 (연결 된 스레드에서 인용).

# from http://www.eggheadcafe.com/software/aspnet/30358576/powershell-and-ini-files.aspx
param ($file)

$ini = @{}
switch -regex -file $file
{
    "^\[(.+)\]$" {
        $section = $matches[1]
        $ini[$section] = @{}
    }
    "(.+)=(.+)" {
        $name,$value = $matches[1..2]
        $ini[$section][$name] = $value
    }
}
$ini

그럼 당신은 할 수 있습니다 :

PS> $links = import-ini links.ini
PS> $links["search-engines"]["link1"]
http://www.google.com
PS> $links["vendors"]["link1"]
http://www.apple.com

다음과 같은 INI 파일을 가정하십시오.

[vendors]
link1=http://www.apple.com
[search-engines]
link1=http://www.google.com

불행히도 정규식은 링크의 코드에서 누락되어 재현해야하지만 섹션 헤더와 주석이없는 파일을 처리하는 버전이 있습니다.


switchwith에 다른 사례를 추가하여 주석을 쉽게 처리 할 수 ​​있습니다 '^#' {}. 또한 점으로 해시 테이블 내용에 액세스 할 수 있으므로 $links.vendors.link1조금 더 읽기 좋을 수도 있습니다.
Joey

2

예, 찾고있는 cmdlet은 get-content 및 select-string입니다.

$content=get-content C:\links.txt
start-process iexplore.exe $content[0]

0

보다 포괄적 인 접근 방식을 위해서는 https://github.com/alekdavis/ConfigFile을 고려 하십시오 . 이 모듈은 INI뿐만 아니라 JSON 형식의 구성 파일을 지원합니다. 변수를 확장하고 몇 가지 깔끔한 트릭을 수행합니다. 기억해야 할 것은 INI 파일의 키-값 쌍의 이름이 스크립트 매개 변수 또는 변수의 이름과 일치해야한다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.