迭代Powershell循环时无法访问XML元素

时间:2011-07-21 14:32:04

标签: xml powershell

让我首先说我是一名没有Powershell经验的实习生。我尽可能地把这个剧本放在一起并撞墙。

基本上,我有一个Powershell脚本,可以查询服务器的XML列表。用于查看其中一个文件是否已被修改的文件。我在遍历服务器场和服务器时没有问题,但是在访问文件的属性时我什么也得不到。

$foreach($Farm in $serverList.Environment.Farm) {
Write-Host .FARM: $Farm.Name
foreach($Server in $serverList.Environment.Farm.Server) {
Write-Host ..SERVER: $Server.Name
foreach($File in $serverList.Environment.Farm.Server.File) {

$fullPath = "\\"+$Server.Name+"\"+($File.Path).Replace(":","$")+$File.Version+"\CONFIG\"+$File.Name
$lastModified = (Get-Item $fullPath).LastWriteTime.toString()

write-host ...FILEPATH: $fullPath $lastModified

... processing if/thens ...
}    }    }

如果我要浏览1个服务器的文件,一切都很完美。但是,一旦我将另一台服务器添加到XML文件中,当我尝试使用$ File属性构建$ fullPath时,我得到空值。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

没有样本数据我无法测试,但尝试这样的事情:

foreach ($Farm in $serverList.Environment.Farm) {
    Write-Host ('.FARM: ' + $Farm.Name)
    foreach ($Server in $Farm.Server) {
        Write-Host ('..SERVER: ' + $Server.Name)
        foreach($File in $Server.File) {
            $fullPath = "\\"+$Server.Name+"\"+($File.Path).Replace(":","$")+$File.Version+"\CONFIG\"+$File.Name
            $lastModified = (Get-Item $fullPath).LastWriteTime.toString()
            write-host "...FILEPATH: $fullPath $lastModified"
#            ... processing if/thens ...
        }
    }
} 

第一次尝试的基本问题是在$ Server循环中,你需要迭代$ Farm的子项,并且在$ File循环中你需要迭代$ Server的子项。