3

PowerShellと少し戦います。テキストファイルのトークンを環境変数の値に置き換えようとしています。たとえば、入力ファイルが次のようになっているとします。

Hello [ENV(USERNAME)], your computer name is [ENV(COMPUTERNAME)]
and runs [ENV(OS)]

私は次のことを試しました:

Get-Content test.txt | ForEach {$_ -replace '\[ENV\((\w+)\)\]', "$env:$1" }

これにより、エラーが発生します。

At line:1 char:74
+ Get-Content test.txt | ForEach {$_ -replace '\[ENV\((\w+)\)\]', "$env:$1 ...
+                                                                  ~~~~~
Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidVariableReferenceWithDrive

私も試しました:

Get-Content test.txt | ForEach {$_ -replace '\[ENV\((\w+)\)\]', [environment]::GetEnvironmentVariable($1) }

しかし、これは変数の取得に失敗し、これを出力として提供します。

Hello , your computer is named
and runs

自分で定義した関数を呼び出そうとしましたが、別のエラーが発生します。

At D:\tfs\HIPv3\prod\Dev\Tools\EnvironmentResolve.ps1:13 char:72
+ Get-Content test.txt | ForEach {$_ -replace '\[ENV\((\w+)\)\]', GetEnvVa ...
+                                                                 ~~~~~~~~
Missing expression after ','.
At D:\tfs\HIPv3\prod\Dev\Tools\EnvironmentResolve.ps1:13 char:73
+ Get-Content test.txt | ForEach {$_ -replace '\[ENV\((\w+)\)\]', GetEnvVa ...
+                                                                 ~~~~~~~~
Unexpected token 'GetEnvVar' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingExpressionAfterToken

誰かがこれを機能させる方法を知っていますか?

4

3 に答える 3

2

私はこれを得た:

$string = 'Hello [ENV(USERNAME)], your computer name is [ENV(COMPUTERNAME)] and runs [ENV(OS)]'

$regex = '\[ENV\(([^)]+)\)]'

 [regex]::Matches($string,$regex) |
  foreach {
            $org = $_.groups[0].value
            $repl = iex ('$env:' + $_.groups[1].value)
            $string = $string.replace($org,$repl)
          }

 $string
于 2013-02-10T03:18:56.713 に答える
0

(二重引用符)の代わりに"$env:$1"(一重引用符)を使用する'$env:$1'と、問題ないはずです。PowerShellは、二重引用符で囲まれた文字列で変数を展開します。あなたのコンテキストでは、PowerShell変数ではありません。これは正規表現トークン$1です

于 2013-02-10T15:19:41.153 に答える
0

[ENV(...)]なぜ使用しないのではなく%...%

$string = 'Hello %USERNAME%, your computer name is %COMPUTERNAME% and runs %OS%'
[System.Environment]::ExpandEnvironmentVariables($string)

こんにちはIanG、あなたのコンピュータ名は1EUKCOL1184で、Windows_NTを実行しています

于 2017-11-23T22:36:26.013 に答える