Lire un fichier de propriétés dans powershell
supposons que j'ai un fichier.propriétés et de son contenu est:
app.name=Test App
app.version=1.2
...
comment puis-je obtenir la valeur de l'app.nom?
21
demandé sur
jos11
2013-11-29 02:17:57
4 réponses
Vous pouvez utiliser ConvertFrom-StringData pour convertir les couples Key=Value en une table de hachage:
$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
35
répondu
mjolinor
2013-11-28 23:44:26
si vous utilisez powershell v2.0 vous pourriez manquer l'argument "- Raw " pour Get-Content. Dans ce cas, vous pouvez utiliser ce qui suit.
contenu C:\temp\Data.txt:
environnement=Q GRZ
target_site=FSHHPU
Code:
$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'
8
répondu
a73x
2014-03-11 15:19:18
je voulais ajouter la solution si vous avez besoin d'échapper (par exemple si vous avez des chemins avec des antislashs)):
$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'
Sans-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'
Ou dans une ligne de la mode:
(ConvertFrom-StringData([Regex]::Escape((Get-Content "./app.properties" -raw)) -replace "(\r)?\n", [Environment]::NewLine)).'app.name'
2
répondu
Brice Ruppen
2018-03-03 11:44:25
je ne sais pas si il y a quelques Powershell intégrée de la façon de faire cela, mais je peux le faire avec les regex:
$target = "app.name=Test App
app.version=1.2
..."
$property = "app.name"
$pattern = "(?-s)(?<=$($property)=).+"
$value = $target | sls $pattern | %{$_.Matches} | %{$_.Value}
Write-Host $value
devrait imprimer "Test App"
1
répondu
Vasili Syrakis
2013-11-28 22:30:59