Давайте предположим, что у меня есть file.properties и его содержание:Прочитайте файл свойств в PowerShell
app.name=Test App
app.version=1.2
...
, как я могу получить значение app.name?
Давайте предположим, что у меня есть file.properties и его содержание:Прочитайте файл свойств в PowerShell
app.name=Test App
app.version=1.2
...
, как я могу получить значение app.name?
Вы можете использовать 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
спасибо !!! Я выполнил свой код следующим образом: $ AppProps = convertfrom-stringdata (get-content ./app.properties -raw) $ AppProps.'client.version ' – jos11
Флаг '-Raw' был добавлен в PowerShell 3 Если вы хотите использовать это в PowerShell 2, используйте 'Get-Content $ file | Out-String' вместо этого. – Koraktor
Я не знаю, есть ли какой-то 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»
Если вы работаете с 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'
Я хотел добавьте решение, если вам нужно экранирование (например, если у вас есть пути с обратными косыми чертами):
$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'
Вы можете использовать регулярное выражение или '-split' строки в' = '. –