2016-04-05 9 views
0

Import/Export-Clixmlを使用して生成した2つの変数$list$oldListの比較を行う予定です。Powershellで変数のプロパティを比較するにはどうすればよいですか?

これまで私が以前に尋ねた私の参照の質問です。必要に応じて詳細が表示されます。

How should I store a reference variable for continued iteration in Powershell

ので、私は正常に次のスクリプトをテストした:

$list = Get-ChildItem C:\localApps\AutomationTest\Loading | where {$_.PSIsContainer} 
$list | Export-Clixml C:\LocalApps\AutomationTest\Loading\foldernames.xml 
$oldList = Import-Clixml C:\LocalApps\AutomationTest\Loading\foldernames.xml 
$oldList 

私の目標は、$oldList.LastWriteTime$list.LastWriteTimeを比較しているので、リストに追加された新しいディレクトリ名を取得することです」 oldList "が生成されました。これらの新しいディレクトリ名は処理され、 "oldList" ...に追加されます。

おそらく次のようなものが考えられましたか?

Compare-Object -ref $oldList -diff $list 
if ($list.LastWriteTime -gt $oldList.LastWriteTime} 
"Continue....(Load lastest folder names into process)" 
+0

もし '$ list'のフォルダが' $ oldList'のそれよりも新しい場合は '$ oldlist'に追加しますか?フォルダが新しい場合は、それも追加する必要があります – Matt

+0

リスト全体を最新のものに上書きしないでください。あなたはもはや存在しない古いものを保つ必要がありますか?私はあなたの最終的なゲームが何であるかに関して少し失われていると思う。 – Matt

+0

@Matt新しいフォルダ名のディレクトリをチェックしています。次に、私のスクリプト変数に新しいフォルダ名をロードして、自分の.exeで処理させます。このスクリプトは毎日実行され、ロードする新しいフォルダを確認します。私はちょうどそれが重複する名前を処理していないことを確認したい。だから、既に処理されているフォルダ名をoldListに追加することに決めました。私は新しいフォルダ名について私のディレクトリをチェックして、OldList内の最後の名前があればそれを処理します。 – Twdeveloper

答えて

0

Compare-Objectです。あなたが正しい後処理をしていることを確認する必要があります。 $listに存在する変更を探している場合は、Where-Objectでフィルタリングするときに正しいサイドインジケータを使用してください。ただ$oldListには存在しなかったフォルダに対応Directory.Infoオブジェクトを返します

Compare-Object $oldList $list | Where-Object{$_.Sideindicator -eq "=>"} | Select-Object -expandProperty InputObject 

。そのコマンドの出力をキャプチャすることは、他の処理に必要な処理です。

その後、$listを入力して、$oldListの出所に出力してください。それ以外のことはあまりありません。

1

これは、以前存在していた各フォルダー項目の古いXMLに対して日付のチェックを行う例です。古いリストになかったものはスキップします。

これはあなたにとって良い出発点です。

$oldList = Import-Clixml #etc 

function Check-Against ([PsObject]$oldList, [string]$path){ 

    $currentItems = Get-ChildItem $path | ? {$_.PSIsContainer} 

    foreach ($oldItem in $oldList){ 

     $currentItem = $currentItems | ? Name -like ($oldItem.Name) 

     if ($currentItem -ne $null){ 
      $oldWriteTime = $oldItem.LastWriteTime 
      $val = $currentItem.LastWriteTime.CompareTo($oldWriteTime) 

      if ($val -gt 0){ 
       # Folder has been changed since then 
       # Do your stuff here 
      } 

      if ($val -eq 0){ 
       # Folder has not changed 
       # Do your stuff here 
      } 

      if ($val -lt 0){ 
       # Somehow the folder went back in time or was restored 
       # Do your stuff here 
      } 
     } 
    } 
} 
関連する問題