Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用Get childitem获取过去3天内修改的文件列表_Powershell_Powershell 2.0 - Fatal编程技术网

Powershell 使用Get childitem获取过去3天内修改的文件列表

Powershell 使用Get childitem获取过去3天内修改的文件列表,powershell,powershell-2.0,Powershell,Powershell 2.0,按目前的情况编写代码 get-childitem c:\pstbak\*.* -include *.pst | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3)} | 基本上,我想做的是得到一个列表,上面的文件夹中的所有PST文件的基础上,他们是新的超过3天。然后我想数一数结果。上面的代码没有错误,但返回的结果为零(文件夹中肯定有PST文件更新了三天。有人知道吗?试试这个: (Get-ChildItem -Path c:\ps

按目前的情况编写代码

get-childitem c:\pstbak\*.* -include *.pst | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3)} |
基本上,我想做的是得到一个列表,上面的文件夹中的所有PST文件的基础上,他们是新的超过3天。然后我想数一数结果。上面的代码没有错误,但返回的结果为零(文件夹中肯定有PST文件更新了三天。有人知道吗?

试试这个:

(Get-ChildItem -Path c:\pstbak\*.* -Filter *.pst | ? {
  $_.LastWriteTime -gt (Get-Date).AddDays(-3) 
}).Count

我只想将此作为注释添加到上一个答案中,但我不能。我尝试了的答案,但在计数为1时出现问题。这将强制使用数组,即使返回一个对象也是如此

([System.Object[]](gci c:\pstback\ -Filter *.pst | 
    ? { $_.LastWriteTime -gt (Get-Date).AddDays(-3)})).Count

如果为空,它仍然不会返回零,但是测试'-lt 1'可以工作。

这里是对Dave Sexton提供的解决方案的一个小更新。很多时候,您需要多个筛选器。筛选器参数只能使用单个字符串,而-Include参数可以使用字符串数组。如果您有一个大型文件树,则只使用要与之进行一次比较的日期,而不是每个文件的日期。以下是我的更新版本:

$compareDate = (Get-Date).AddDays(-3)    
@(Get-ChildItem -Path c:\pstbak\*.* -Filter '*.pst','*.mdb' -Recurse | Where-Object { $_.LastWriteTime -gt $compareDate}).Count

与之前的回答非常相似,但是来自当前目录,查看任何文件,并且只查看4天以前的文件。这是我进行研究所需要的,上面的答案都非常有用。谢谢

Get-ChildItem -Path . -Recurse| ? {$_.LastWriteTime -gt (Get-Date).AddDays(-4)}

-gt
中更改
-lt
中最近3天内修改的文件。其他人可能会想知道,为什么我们在捕获所有结果后进行筛选,而不是使用
-Filter
参数。此cmdlet上的
Filter
会使用一个掩码来比较
路径
;它不允许您进行筛选在其他cmdlet上使用此参数可能会导致其他属性上出现错误。若要强制将数组作为返回对象,请使用@而不是[System.object[]。您也可以使用[array]作为另一种选择。同一命令不使用?别名:
Get ChildItem-Path.-Recurse | Where对象{$\ LastWriteTime-gt(Get Date).AddDays(-4)}