使用Powershell的文件大小

时间:2019-07-09 20:25:22

标签: powershell

我想做的是创建一个PS脚本,以查看某个文件夹何时具有超过1GB的文件。如果它发现文件超过1GB,我希望它写一个日志文件,其中包含说明该文件名及其大小的信息。

这有效,但不能完全正常,如果文件小于1GB,我不需要日志文件。 (现在,它将显示超过1GB的文件信息,但是如果少于1GB,它仍会创建一个没有数据的日志文件)。我不希望它为小于1GB的空间创建日志。

关于如何做到这一点的任何想法?

谢谢!

瑞安

Get-ChildItem -Path C:\Tomcat6.0.20\logs -File -Recurse -ErrorAction SilentlyContinue | 
Where-Object {$_.Length -gt 1GB} | 
Sort-Object length -Descending | 
Select-Object Name,@{n='GB';e={"{0:N2}" -F ($_.length/ 1GB)}} | 
Format-List Name,Directory,GB > C:\Users\jensen\Desktop\FolderSize\filesize.log`

2 个答案:

答案 0 :(得分:1)

首先,使用您要使用的术语/过滤器设置一个变量并存储结果

$items = Get-ChildItem -Path C:\Tomcat6.0.20\logs -File -Recurse -ErrorAction SilentlyContinue |
     Where-Object {$_.Length -gt 1GB} | 
     Sort-Object Length -Descending |
     Select-Object Name,@{n='GB';e={"{0:N2}" -F ($_.length/ 1GB)}} 

然后通过管道将Out-File到所需的输出路径。本示例将向运行脚本的用户的桌面输出文件,根据需要进行更改:

$items | Out-File -FilePath $ENV:USERPROFILE\Desktop\filesize.log -Force

-Force参数将覆盖现有的filesize.log文件(如果已经存在)。

答案 1 :(得分:0)

为确保不写入空白文件,应收集与过滤器匹配的最小启动结果,并对其进行测试以查看它们是否包含任何内容。

如果启用,则可以编辑脚本,但是如果启用,则可以继续进行排序并选择数据并将其输出到日志文件。

# Collect Matching Files
$Matched = GCI -Path "C:\Tomcat6.0.20\logs" -File -R -ErrorA "SilentlyContinue" | ? {
  $_.Length -gt 1GB
}

#  Check is $Matched contains Results before further processing, otherwise, we're done!

IF ([bool]$Matched) {
  # If here, we have Data so select what we need and output to the log file:
  $Matched | Sort Length -D | FT Name,Directory,@{
    n="GB";e={"{0:N2}" -F ($_.Length/ 1GB)}
  } -Auto | Out-File "C:\Users\jensen\Desktop\FolderSize\filesize_$(Get-Date -F "yyyy-MM-dd_HH-mm-ss").log"
}

在上面的脚本中,我将$.固定为$_.,并从匹配1GB文件和将它们匹配到文件中分离出来,然后将它们输出到文件中。

我们只是通过检查变量是否有任何结果或$NULL /未定义,来简单地测试文件是否匹配1 GB。

如果是这样,则无需采取任何进一步的措施。

仅当匹配1Gb文件时,我们才会快速sort它们,并select您想要的详细信息,但是我们只将Format-TableFT)与-Auto-size获得美观的输出,这种数据更易于查看。

(注意Format-Table一步选择信息并将其格式化为表格,节省了不必要的步骤,即使用Select获取数据,然后将其{|)输送到{ {1}}或Format-list,因为这只会增加一点多余的步骤,Format-Table最好用于需要使用需要“面向对象”操作的数据的其他步骤的情况。未来的步骤。)

然后我们使用Select-Object用管道传输输出以将其全部保存到日志文件中,并且我还更改了日志文件名以包含ISO格式Out-File的当前日期和时间,因此您可以保存每次运行并稍后对其进行审查,并且不想拥有一个巨大的文件或没有运行历史。