1

私はこれが簡単なことだと知っていますが、私の人生では、それを機能させることはできないようです. 次のようにフォーマットされた XML 構成ファイルから値をロードするスクリプトがあります。

<configuration>
<global>
    <rootBuildPath>\\devint1\d`$\Builds\</rootBuildPath>
</global>
</configuration>

#Load the xml file
$xmlfile = [xml](get-content "C:\project\config.xml")
# get the root path
$rootBuildPath = $xmlfile.configuration.global.rootBuildPath

$currentRelease = Get-ChildItem $rootBuildPath -Exclude "Latest" | Sort -Descending LastWriteTime | select -First 1

# do some stuff with the result, etc.

get-childitem が

Get-ChildItem : Cannot find path '\\devint1\d`$\Builds' because it does not exist.

シェルでコマンドを実行すると機能しますが、何らかの理由で XML ファイルの値を使用しようとすると失敗します。バックティックをエスケープして、バックティックを削除しようとしましたが、役に立ちませんでした。

これを実現するために共有を使用することはできません。

考え?

4

3 に答える 3

1

エラーが発生する理由は、xml ファイルから取得したときの $rootBuildPath のタイプが文字列であるためです。これは、呼び出しと同等になります

Get-ChildItem '\\devint1\d`$\Builds\' -Exclude "Latest" | ...

あなたが見ている例外をスローします。実行時にエラーが発生しない理由

Get-ChildItem \\devint1\d`$\Builds\ -Exclude "Latest" | ...

コマンド ラインからは、PowerShell はパスをパスとして解析してから、Get-ChildItem コマンドレットに渡します。

コードを機能させるには、Get-ChildItem を呼び出す前に、パスから誤った '`' を削除する必要があります。

于 2012-11-14T19:53:41.407 に答える
0

xml ファイルでバッククォートを削除できない場合は、割り当て時に削除できます。$rootBuildPath

$rootBuildPath = $xmlfile.configuration.global.rootBuildPath -replace '`',''
于 2012-11-14T19:48:46.910 に答える
0

構成ファイルの $ の前にある逆引用符を削除するだけです:

<configuration>
<global>
    <rootBuildPath>\\devint1\d$\Builds\</rootBuildPath>
</global>
</configuration>
于 2012-11-14T19:46:41.297 に答える