我想做的是创建一个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`
答案 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-Table
(FT
)与-Auto-size
获得美观的输出,这种数据更易于查看。
(注意Format-Table
一步选择信息并将其格式化为表格,节省了不必要的步骤,即使用Select
获取数据,然后将其{|
)输送到{ {1}}或Format-list
,因为这只会增加一点多余的步骤,Format-Table
最好用于需要使用需要“面向对象”操作的数据的其他步骤的情况。未来的步骤。)
然后我们使用Select-Object
用管道传输输出以将其全部保存到日志文件中,并且我还更改了日志文件名以包含ISO格式Out-File
的当前日期和时间,因此您可以保存每次运行并稍后对其进行审查,并且不想拥有一个巨大的文件或没有运行历史。