web-dev-qa-db-ja.com

PowerShellでプロパティファイルを読み取る

File.propertiesがあり、その内容は次のとおりであるとします。

app.name=Test App
app.version=1.2
...

app.nameの値を取得するにはどうすればよいですか?

26
jos11

ConvertFrom-StringDataを使用して、Key = Valueペアをハッシュテーブルに変換できます。

$filedata = @'
app.name=Test App
app.version=1.2
'@

$filedata | set-content appdata.txt

$AppProps = convertfrom-stringdata (get-content ./appdata.txt -raw)
$AppProps

Name                           Value                                                                 
----                           -----                                                                 
app.version                    1.2                                                                   
app.name                       Test App                                                              

$AppProps.'app.version'

 1.2
41
mjolinor

Powershell v2.0で実行している場合、Get-Contentの「-Raw」引数が欠落している可能性があります。この場合、次を使用できます。

C:\ temp\Data.txtの内容:

環境= Q GRZ

target_site = FSHHPU

コード:

$file_content = Get-Content "C:\temp\Data.txt"
$file_content = $file_content -join [Environment]::NewLine

$configuration = ConvertFrom-StringData($file_content)
$environment = $configuration.'environment'
$target_site = $configuration.'target_site'
10
a73x

エスケープが必要な場合(たとえば、バックスラッシュのあるパスがある場合)、ソリューションを追加したかったのです。

$file_content = Get-Content "./app.properties" -raw
$file_content = [Regex]::Escape($file_content)
$file_content = $file_content -replace "(\\r)?\\n", [Environment]::NewLine
$configuration = ConvertFrom-StringData($file_content)
$configuration.'app.name'

-rawなし:

$file_content = Get-Content "./app.properties"
$file_content = [Regex]::Escape($file_content -join "`n")
$file_content = $file_content -replace "\\n", [Environment]::NewLine
$configuration = ConvertFrom-StringData($file_content)
$configuration.'app.name'

または、1行で:

(ConvertFrom-StringData([Regex]::Escape((Get-Content "./app.properties" -raw)) -replace "(\\r)?\\n", [Environment]::NewLine)).'app.name'
3
Brice Ruppen

これを行うPowershell統合された方法があるかどうかはわかりませんが、正規表現でそれを行うことができます:

$target = "app.name=Test App
app.version=1.2
..."

$property = "app.name"
$pattern = "(?-s)(?<=$($property)=).+"

$value = $target | sls $pattern | %{$_.Matches} | %{$_.Value}

Write-Host $value

「テストアプリ」を印刷する必要があります

1
Vasili Syrakis