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