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.

如果我在 shell 中运行命令,它可以工作,但由于某种原因,如果我尝试使用 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

只需删除配置文件中 $ 之前的反引号:

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

如果您无法删除 xml 文件中的反引号,则可以在分配给时将其删除$rootBuildPath

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