구성 파일을 파워셸 스크립트에 소개하려면 어떻게 해야 합니까?
제가 Foo.ps1이라는 파워셸 스크립트를 가지고 있다고 가정해 보겠습니다.
저는 Foo.ps1.config라는 XML 구성 파일을 소개하려고 합니다.
다음과 같은 환경 설정을 지정할 수 있습니다.
<FunctionsDirectory>
$ScriptDirectory\Functions
</FunctionsDirectory>
<ModulesDirectory>
$ScriptDirectory\Modules
</ModulesDirectory>
그리고 나서 이 구성을 Fo.ps1의 시작 부분에 로드하여 모듈을 가져오고 Functions 디렉토리에 dot notate 할 수 있도록 하겠습니다.
파워셸에서 어떻게 하면 이걸 이룰 수 있을까요?
아마 더 쉬운 해결책일 겁니다...구성 파일이 이름 "Confix.xml"이라고 가정하고 다음을 시도합니다.
PS Testing> [xml]$configFile= get-content .\Config=.xml
PS Testing> $configFile
xml configuration
--- -------------
version="1.0" configuration
새 변수에서 데이터 읽기:
PS Testing> $configFile.configuration.appsettings
#comment add
-------- ---
Vars {add, add}
PS Testing> $configFile.configuration.appsettings.add
key value
--- -----
var1 variableValue1
var2 variableValue2
PS Testing> $configFile.configuration.appsettings.add[0].value
variableValue2
간단히 말해서, 변수를 XML로 캐스팅하고 컨텐츠를 가져옵니다.
이 경우 Config.xml은 다음과 같습니다.
<?xml version="1.0"?>
<configuration>
<startup>
</startup>
<appSettings>
<!--Vars -->
<add key="var1" value="variableValue1"/>
<add key="var2" value="variableValue2"/>
</appSettings>
</configuration>
XML 구성 대신 다른 유형의 구성을 사용할 수 있는 유연성이 있는 경우.글로벌 PS 구성 파일을 사용할 것을 제안하며 다음과 같은 방법이 있습니다.
Powershell 구성 파일(예: Config.ps1)을 만든 다음 모든 구성을 전역 변수로 넣고 첫 번째 단계로 시작하여 스크립트 컨텍스트에서 구성 값을 사용할 수 있도록 합니다.
이 접근 방식의 장점은 스칼라 변수, 컬렉션 및 해시와 같은 다양한 유형의 데이터 구조를 Config.ps1 PS 파일에서 사용할 수 있고 PS 코드에서 쉽게 참조할 수 있다는 것입니다.
다음은 실행 중인 예입니다.
다음은 C:\Config\Config.ps1 파일입니다.
$global:config = @{
Var1 = "Value1"
varCollection = @{
item0 = "colValue0"
item1 = "colValue1"
item2 = "colValue2"
}
}
그런 다음 Config.ps1 파일에서 이 모듈 C에 함수/변수를 로드합니다.\모듈\PSModule.psm1은 다음과 같습니다.
$scriptFiles = Get-ChildItem "$PSScriptRoot\Config\*.ps1" -Recurse
foreach ($script in $scriptFiles)
{
try
{
. $script.FullName
}
catch [System.Exception]
{
throw
}
}
마지막으로 초기화 스크립트에는 다음 한 줄이 포함됩니다. ( C:\Init.ps1).
Import-Module $PSScriptRoot\Module\PSModule.psm1 -Force
Init.ps1을 실행하면 스크립트 컨텍스트에서 global:config 변수를 사용할 수 있습니다.출력은 다음과 같습니다.
키스의 해결책에 의하면...XML을 로드할 코드:
$configFile = "c:\Path2Config"
if(Test-Path $configFile) {
Try {
#Load config appsettings
$global:appSettings = @{}
$config = [xml](get-content $configFile)
foreach ($addNode in $config.configuration.appsettings.add) {
if ($addNode.Value.Contains(‘,’)) {
# Array case
$value = $addNode.Value.Split(‘,’)
for ($i = 0; $i -lt $value.length; $i++) {
$value[$i] = $value[$i].Trim()
}
}
else {
# Scalar case
$value = $addNode.Value
}
$global:appSettings[$addNode.Key] = $value
}
}
Catch [system.exception]{
}
}
XML 값에서 변수를 채우는 방법:
$variable1 = $appSettings["var1"]
$variable2 = $appSettings["var2"]
그리고 관련 XML:
<?xml version="1.0"?>
<configuration>
<startup>
</startup>
<appSettings>
<!--Vars -->
<add key="var1" value="variableValue1"/>
<add key="var2" value="variableValue2"/>
</appSettings>
</configuration>
(@yantaq's와 유사한) 또 다른 솔루션은 별도의 스크립트를 가지고 그것을 로드하는 것입니다.
그렇게config.ps1
포함 내용:
$Environment = $Environment.ToUpper()
$GDriveUNC = "\\servername.domain.net\Data"
$BinLocation = "$pwd\bin-$Environment"
이 경우 주의하십시오.$Environment
는 메인 스크립트에 대한 주장이고, 원하는 조작은 무엇이든 할 수 있습니다.
그러면 메인 스크립트에서는 다음과 같이 'config' 스크립트를 실행합니다.
. $PSScriptRoot\config.ps1
언급URL : https://stackoverflow.com/questions/13698174/how-can-i-introduce-a-config-file-to-powershell-scripts
'programing' 카테고리의 다른 글
Oracle에서 .sql 파일을 가져오시겠습니까? (0) | 2023.09.10 |
---|---|
printf를 사용하여 clock_t를 인쇄하는 올바른 방법은 무엇입니까? (0) | 2023.09.10 |
POST가 있는 AJAX reload 페이지 (0) | 2023.09.10 |
앵커 텍스트를 jquery로 바꿉니다. (0) | 2023.09.10 |
특정 값이 충족될 때 고유 카운트에 대한 합계 열 (0) | 2023.09.10 |