2013-11-28 3 views
20

Давайте предположим, что у меня есть file.properties и его содержание:Прочитайте файл свойств в PowerShell

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

, как я могу получить значение app.name?

+0

Вы можете использовать регулярное выражение или '-split' строки в' = '. –

ответ

28

Вы можете использовать ConvertFrom- StringData для преобразования ключевых пар = значение в хэш-таблице:

$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 
+0

спасибо !!! Я выполнил свой код следующим образом: $ AppProps = convertfrom-stringdata (get-content ./app.properties -raw) $ AppProps.'client.version ' – jos11

+9

Флаг '-Raw' был добавлен в PowerShell 3 Если вы хотите использовать это в PowerShell 2, используйте 'Get-Content $ file | Out-String' вместо этого. – Koraktor

1

Я не знаю, есть ли какой-то 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 

Если напечатать «Test App»

7

Если вы работаете с Powershell v2.0 вы можете отсутствовать в «-raw» аргумент для Get-Content. В этом случае вы можете использовать следующее.

Содержание 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' 
0

Я хотел добавьте решение, если вам нужно экранирование (например, если у вас есть пути с обратными косыми чертами):

$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' 

Или в одной линии моды: с

(ConvertFrom-StringData([Regex]::Escape((Get-Content "./app.properties" -raw)) -replace "(\\r)?\\n", [Environment]::NewLine)).'app.name' 
Смежные вопросы