我希望对使用$list
生成的两个变量$oldList
和Import/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)"
答案 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
来自的位置。除此之外没什么。