Nehmen wir an, dass ich ein file.properties haben und ihr Inhalt ist:Lesen Sie eine Eigenschaftendatei in Powershell
app.name=Test App
app.version=1.2
...
, wie kann ich den Wert von app.name bekommen?
Nehmen wir an, dass ich ein file.properties haben und ihr Inhalt ist:Lesen Sie eine Eigenschaftendatei in Powershell
app.name=Test App
app.version=1.2
...
, wie kann ich den Wert von app.name bekommen?
Sie können ConvertFrom- verwenden String zu konvertieren Schlüssel = Wert-Paare zu einer Hash-Tabelle:
$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
danke !!! Ich habe meinen Code wie folgt implementiert: $ AppProps = convertfrom-stringdata (get-content ./app.properties -raw) $ AppProps.'client.version ' – jos11
Das Flag "-Raw" wurde in PowerShell 3 hinzugefügt Wenn Sie dies in PowerShell 2 verwenden möchten, verwenden Sie 'Get-Content $ file | Out-String "statt. – Koraktor
Ich weiß nicht, ob es eine Powershell integrierte Art und Weise, dies zu tun ist, aber ich kann es mit regex tun:
$target = "app.name=Test App
app.version=1.2
..."
$property = "app.name"
$pattern = "(?-s)(?<=$($property)=).+"
$value = $target | sls $pattern | %{$_.Matches} | %{$_.Value}
Write-Host $value
Sollte „Test App“ drucken
Wenn Sie mit Powershell v2.0 laufen Sie möglicherweise das „-Raw“ Argument für Get-Content fehlen. In diesem Fall können Sie Folgendes verwenden.
Inhalt von C: \ temp \ Data.txt:
Umwelt = 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'
Ich wollte Fügen Sie die Lösung hinzu, wenn Sie es meiden müssen (wenn Sie beispielsweise Pfade mit umgekehrten Schrägstrichen haben):
$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'
Ohne die -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'
Oder in einer einzeiligen Mode:
(ConvertFrom-StringData([Regex]::Escape((Get-Content "./app.properties" -raw)) -replace "(\\r)?\\n", [Environment]::NewLine)).'app.name'
Sie können einen regulären Ausdruck verwenden oder '-split' die Linien bei' = '. –