Powershell Get-childitem从XML返回UNC值的“无法找到路径”

时间:2012-11-14 19:42:09

标签: xml powershell unc

我知道这是一件简单的事,但对于我的生活,我似乎无法使它成功。我们有一个脚本,可以从格式化的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文件中的值,它就会失败。我试图逃避反击并取消反击,但无济于事。

我无法使用分享来实现这一目标。

思想?

3 个答案:

答案 0 :(得分:1)

您收到错误的原因是因为从xml文件获取它时$ rootBuildPath的类型是string。这相当于调用

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

将抛出你看到的异常。它运行

时不会抛出错误的原因
Get-ChildItem \\devint1\d`$\Builds\ -Exclude "Latest" | ...
来自命令行的

是PowerShell在将路径作为路径解析之前将其交给Get-ChildItem命令行开关。

为了使您的代码有效,您必须在调用Get-ChildItem之前从路径中删除错误的“`”。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

$rootBuildPath = $xmlfile.configuration.global.rootBuildPath -replace '`',''