-1

我正在解析具有多个子目录的目录,并希望将LastAccessed时间与获取日期时间进行比较,以查看自昨天以来是否已访问该文件,并基于此我将删除该文件或不理会它。我已经尝试将 get-date 结果输出到文本文件并将其作为字符串拉回,我尝试过通配符我什至已经使用了-like而不是-eq为了让比较工作,但它是没有正确比较数据。任何帮助将不胜感激。

这是我当前的代码:

$servers="servera","serverb"
$date3=get-date -Format d
foreach($a in $servers){
    $CTXGPDir="\C$\ProgramData\Citrix\GroupPolicy"
    $CTXGPDirFP="\\"+"$a"+"$CTXGPDir"
    $CTXGPUserDirstoRM=Get-ChildItem "$CTXGPDirFP"|where-Object{$_.Name -notlike   "*.gpf"}
    foreach($i in $CTXGPUserDirstoRM){
        $datestring="$date3"+" *"
        $CTXUserGPPath="\C$\ProgramData\Citrix\GroupPolicy\$i"
        $CTXUserGPFP="\\"+"$a"+"$CTXUserGPPath"
        $file=get-item $CTXUserGPFP
        $isFileInactive=$file|select-object -expandproperty LastAccessTime
        write-host $file
        write-host $isFileInactive
        write-host $datestring
        if($isFileInactive -like "$datestring *"){write-host "$CTXUserGPFP on $a has lastwritetime of $isFileInactive and should NOT BE deleted"}
        if($isFileInactive -notlike "$datestring *"){write-host "$CTXUserGPFP on $a has lastwritetime of $isFileInactive and SHOULD BE deleted"}
        }
4

1 回答 1

1

您的日期比较存在严重缺陷。

get-date -format dString根据您的区域设置返回一个表示当前日期的值。

get-childitem <file> | select -expandproperty lastaccesstime返回一个DateTime对象,该对象使用您的区域设置格式化为“长”日期/时间。

为了有效地比较这两个日期,您需要将后者转换为相同的格式。

$isFileInactive=($file|select-object -expandproperty LastAccessTime).ToShortDateString()

$isFileInactive现在的String格式与您使用的相同,get-date -format d您可以进行适当的比较。

if($isFileInactive -eq $datestring){write-host "$CTXUserGPFP on $a has lastwritetime of $isFileInactive and should NOT BE deleted"}

如果您必须处理时区,您可能需要修改它以添加.ToLocalTime()before ToShortDateString()

于 2013-05-29T18:45:44.630 回答