如何比较Powershell中的变量属性?

时间:2016-04-05 15:52:19

标签: powershell

我希望对使用$list生成的两个变量$oldListImport/Export-Clixml进行比较。

这是我之前提过的参考问题。如果需要,它包含更多细节。

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

我的目标是将$list.LastWriteTime$oldList.LastWriteTime进行比较,并获取自生成“oldList”以来添加到列表中的所有新目录名称。然后将处理这些新的目录名称并将其添加到“oldList”......等等。

想到下面这样的东西可能会起作用吗?

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

2 个答案:

答案 0 :(得分: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
            }
        }
    }
}

答案 1 :(得分:0)

Compare-Object就是你要求的。只需确保您正在进行正确的后期处理。如果您只是在查找$list中存在的更改,请在使用Where-Object进行过滤时使用正确的旁边指示符。

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

这将返回与$oldList中不存在的文件夹对应的Directory.Info对象。捕获该命令的输出是您正在进行的其他处理所需要的。

之后,只需取出$list并将其输出到$oldList来自的位置。除此之外没什么。