2011-07-21 48 views
1

让我从开始说我是一名没有Powershell经验的实习生。我尽我所能将这个脚本放在一起,并且撞到了墙上。通过PowerShell循环迭代时无法访问XML元素

基本上,我有一个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时,我会得到空值。

任何帮助将不胜感激。

回答

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 ... 
     } 
    } 
} 

你的第一个尝试的基本问题是,在$服务器循环,你需要遍历$的孩子Farm并在$ File循环中需要迭代$ Server的子元素。

+0

非常感谢,这工作!我希望我能给你一个upvote,但遗憾的是我没有足够的代表:( 再次感谢! – mkngrm