2017-03-21 25 views
0

我有一個放置文件的XML文件。我的目標是讓PowerShell腳本顯示所有文件及其屬性的列表。使用XML文件在PowerShell中創建項目列表

我的XML文件:

<FileList> 
    <File> 
     <Path>C:\File1.txt</Path> 
     <MaxSize>20000</MaxSize> 
    </File> 

    <File> 
     <Path>C:\File2.txt</Path> 
     <MaxSize>20000</MaxSize> 
    </File> 
</FileList> 

我在PowerShell中的輸出需要檢索文件,它的大小。

輸出示例:

 
File1: 4mb (max size= 20000mb) 
File2: 3mb (max size= 20000mb) 

後來,後來我想創建一個方法來檢查,如果每個文件是低於其最大尺寸(但首先我需要檢查,如果我當然可以檢索它們)

我試圖找到一種方法,我可以將所有文件從XML轉換爲PowerShell中的列表或文件(但是沒有成功)。試圖達到這個目標的最佳實踐是什麼?

當前代碼:

$files = $configFile.SelectNodes("FileList/File") 

foreach ($file in $files) { 
    Write-Host $file.Path 
} 
break 
+0

人誰downvoted,你能解釋什麼是錯誤的,我的問題嗎?或者如果它是重複的,將我鏈接到類似的問題?我在這裏發現了0個類似的例子。SO –

+0

你能分享你已有的代碼嗎? – autosvet

+0

添加了我的代碼,它給出了路徑的輸出,但是如何使用路徑來獲取每個文件的實際大小? –

回答

3

從XML數據和文件屬性創建自定義對象,並在一個變量,例如收集對象像這樣:

$list = foreach ($file in $files) { 
    $f = Get-Item $file.Path 
    New-Object -Type PSObject -Property @{ 
    Name = $f.Name 
    Path = $file.Path 
    Size = $f.Length 
    MaxSize = [int]$file.MaxSize 
    } 
} 

另外,您可以添加到calculated properties對象FileInfo

$list = foreach ($file in $files) { 
    Get-Item $file.Path | Select-Object *,@{n='MaxSize';e={[int]$file.MaxSize}} 
} 
+0

謝謝你的回答幫助我,但我不知道如何。您的第一個應用方法是否與編程中的「鑄造」相媲美?當我在PowerShell中進行鑄造對象的研究時,我還沒有看到類似的東西。是否有你在那裏使用的名字? –

+1

這不是真的鑄造。您正在構建一個新對象,並使用另一個對象的值填充它。 –

+0

嗯,我想我有點檢查New-Object cmdlet後得到它。非常感謝你! –

相關問題