2011-07-21 45 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