使用Powershell的文件大小

使用Powershell的文件大小,powershell,Powershell,我试图做的是创建一个PS脚本,以查看某个文件夹的文件是否超过1GB。如果它发现一个超过1GB的文件,我想让它写一个日志文件,其中包含信息,说明特定文件的名称及其大小 这是可行的,但不完全有效,如果文件小于1GB,我不需要日志文件。(现在这将显示超过1GB的文件信息,但如果小于1GB,它仍会创建一个没有数据的日志文件)。我不希望它为小于1GB的任何内容创建日志 你知道怎么做吗 谢谢 瑞安 首先,使用您要查找的术语/过滤器设置一个变量,并存储结果 $items = Get-ChildItem -Pa

我试图做的是创建一个PS脚本,以查看某个文件夹的文件是否超过1GB。如果它发现一个超过1GB的文件,我想让它写一个日志文件,其中包含信息,说明特定文件的名称及其大小

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

你知道怎么做吗

谢谢

瑞安


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

$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)}} 
然后将其输送到
输出文件
到所需的输出路径。此示例将向运行脚本的用户的桌面输出一个文件,根据需要进行更改:

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


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

为了确保不写入空白文件,您应该收集与筛选器匹配的最小起始结果,并测试它们是否包含任何内容

然后如果他们继续;t您可以编辑脚本,但如果他们编辑了脚本,您可以继续进行排序并选择数据并将其输出到日志文件

# 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
/未定义来测试是否有任何文件在1GB下匹配

如果是这样,就没有必要采取任何进一步的行动

只有当1Gb文件匹配时,我们才能快速对它们进行排序,并选择所需的详细信息,但我们只需使用
格式表
FT
)和
-自动调整大小
,就可以获得美观的输出,更容易查看此类数据

(注意
格式化表格
一步选择信息并将其格式化为表格,省去了不必要的步骤,即使用
选择
获取数据,然后使用管道(
|
)将其转换为
格式列表
格式表
,因为这只是增加了一点冗余步骤。
选择对象
最好在您需要在以后的步骤中对需要“面向对象”操作的数据执行进一步步骤时使用。)


然后,我们使用
Out file
,通过管道将输出保存到日志文件中,我还更改了日志文件名,以ISO格式
filesize\u$(Get date-F“yyyy-MM-dd\u HH-MM-ss”)包含当前日期和时间.log
这样您就可以保存每次运行并在以后查看它们,而不需要一个庞大的文件或没有运行历史记录。

谢谢您的帮助!!如果没有数据,我将使用什么来删除输出?我只想保留其中包含数据的输出文件。感谢Ben提供的信息和解释,以便我可以学习!谢谢@瑞安很高兴能帮上忙!:)
# 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"
}