2017-03-21 6 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の類似の例を見つけました –

+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 propertiesFileInfoにオブジェクトを追加することができます。

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

お返事いただきありがとうございました。あなたの最初に適用されたメソッドは、プログラミングの 'キャスティング'に匹敵しますか? PowerShellでオブジェクトをキャストするための研究を行っていたとき、私は似たようなことは何も見ていませんでした。あなたがそこで使ったものの名前はありますか? –

+1

これは実際にキャストしていません。あなたは新しいオブジェクトを構築し、別のオブジェクトの値でそれを埋めています。 –

+0

ええと、私はNew-Objectコマンドレットをチェックアウトした後に得られると思います。どうもありがとうございました! –

関連する問題