PowerShell을 읽는 방법.PSD1 파일 안전
PowerShell 모듈 매니페스트 파일 형식(.psd1)은 기본적으로 특정 키가 필요한 해시 테이블 리터럴입니다.PowerShell 스크립트의 구성 파일에 적합합니다.궁극적으로 제가 원하는 것은 스크립트 관련 키 집합이 포함된 .psd1 파일을 읽는 것입니다.
예를 들어 (MyScriptConfig.psd1):
@{
FTPHost = "ftp.blah.com"
FTPUserName = "blah"
FTPPassword = "blah"
}
XML, INI, JSON 등의 정보를 사용할 수 없는 이유는 없지만 PowerShell의 모듈 매니페스트와 동일한 기본 데이터 형식을 사용하고 싶습니다.
분명히 가장 쉬운 것은 텍스트를 읽고 그것을 전달하는 것입니다.Invoke-Expression
그러면 해시 테이블이 반환되지만 파일에 있는 오류 발생 가능성이 높고 잠재적으로 안전하지 않은 모든 파일이 호출됩니다.
PowerShell cmdlet의 "안전한" 서브셋을 사용하여 이 데이터를 읽기 위해 cmdlet을 호출했다고 생각했지만,ConvertFrom-StringData
그리고.DATA
해시 테이블 리터럴이 포함된 임의 파일을 읽을 수 있는 섹션은 없습니다.
PowerShell에 내장되어 있어 이 작업을 수행할 수 있습니까?기본 제공되는 기능이 없다면 JSON 또는 Key=Value를 사용하여ConvertFrom-StringData
.
Powershell 버전 5에서는 PSD1 파일을 안전하게 구문 분석할 수 있도록 Cmdlet Import-PowershellDataFile을 추가했습니다.
버전 5 이전에는 적어도 세 가지 솔루션이 있었습니다.
Cmdlet 가져오기-로컬라이즈된 데이터입니다.언어 파일을 처리하기 위한 것이지만 PSD1 형식의 파일을 읽을 수 있습니다.
# Create a test PSD1 file @' @{ a1 = 'a1' a2 = 2 a3 = @{ b1 = 'b1' } } '@ | Set-Content -Path .path\example.psd1 # Read the file Import-LocalizedData -BaseDirectory .\path -FileName example.psd1 -BindingVariable Data # Use the data $Data.a1 $Data.a3.b1
데이터 섹션을 사용하여 인라인 데이터를 처리할 수도 있습니다(인라인은 목적을 달성하지 못합니다).
# Safely parse data $Data2 = DATA { @{ a1 = 'a1' a2 = 2 a3 = @{ b1 = 'b1' } } } # Use the data $Data2.a1 $Data2.a3.b1
세 번째는 @Jakub Berezanski가 언급한 PowerShell DSC 매개 변수 변환 특성입니다.
PowerShell DSC는 구성을 호출할 때 .psd1 파일에 대한 경로 전달을 지원하는 데 사용되는 매개 변수 변환 특성을 구성 데이터 매개 변수 값으로 정의합니다.이 속성은 공개적이며 다음과 같은 사용자 지정 기능에서 사용할 수 있습니다.
function Parse-Psd1
{
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true)]
[Microsoft.PowerShell.DesiredStateConfiguration.ArgumentToConfigurationDataTransformation()]
[hashtable] $data
)
return $data
}
Parse-Psd1 C:\MyData.psd1
속성 구현은 다음 cmdlet만 허용되는 제한된 언어 컨텍스트에서 파일 내용을 평가하는 내부 도우미를 호출합니다.
Import-LocalizedData
ConvertFrom-StringData
Write-Host
Out-Host
Join-Path
모듈 매니페스트는 PSH의 제한된 하위 집합만 사용하도록 특별히 설계되었지만 해당 모드에서 콘텐츠를 처리하고 모든 데이터를 가져올 수 있는 직접적인 방법은 없습니다1.그러나 다음을 사용하여 매니페스트의 유효성을 확인할 수 있습니다.Test-ModuleManifest
2 그런 다음 파일의 내용을 평가해야 합니다.
1 적어도 PowerShell In Action 2nd Ed가 다루는 한.
2 안타깝게도 책의 온라인 사본은 주석을 허용하기 위해 소스 코드에 이미지를 사용하므로 여기서 복사할 수 없습니다.
언급URL : https://stackoverflow.com/questions/25408815/how-to-read-powershell-psd1-files-safely
'programing' 카테고리의 다른 글
마스터 슬레이브 토폴로지에서 두 데이터 센터를 구성하려면 어떻게 해야 합니까? (0) | 2023.08.27 |
---|---|
내용 항목을 텍스트 파일로 만드는 스크립트 (0) | 2023.08.27 |
C의 구조체 멤버에 대한 기본값 (0) | 2023.08.27 |
URL 해시 위치를 가져와 jQuery에서 사용 (0) | 2023.08.27 |
div에 1px 테두리를 추가하면 div 크기가 증가합니다. 원하지 않습니다. (0) | 2023.08.27 |