用于在服务器上检查文件一段时间的脚本

时间:2014-01-31 03:24:13

标签: powershell powershell-v2.0 powershell-v3.0

我创建了以下脚本来检查服务器中特定路径上剩余的文件。

我在下面的问题请帮助我。

  • 如何将file.CreationTime更改为12小时格式。
  • 如何将整个内容导出到文件或电子邮件。

请帮助我微调以下脚本

$fullPath = "\\server\D$\fn_1"
$numdays = 0
$numhours = 0
$nummins = 1

function ShowOldFiles($path, $days, $hours, $mins)
{
    $files = @(get-childitem $path -include *.* -recurse | where {($_.LastWriteTime -lt (Get-Date).AddDays(-$days).AddHours(-$hours).AddMinutes(-$mins)) -and ($_.psIsContainer -eq $false)})
    if ($files -ne $NULL)
    {
        for ($idx = 0; $idx -lt $files.Length; $idx++)
        {
            $file = $files[$idx]
            write-host ("File Name: " + $file.Name, ", Pending Since : " + $file.CreationTime) -Fore Red


        }
    }
}

ShowOldFiles $fullPath $numdays $numhours $nummins

2 个答案:

答案 0 :(得分:0)

要转储到文件,请将整个for循环替换为:

$files | select-object Name,@{name="Pending Since";Expression={$_.CreationTime}}|export-csv -notypeinfo -path c:\output.csv;

这将生成一个CSV文件,其中列出了您的所有文件及其创建时间。将最终交付/演示文稿的格式保存到用户(在这种情况下,您可以格式化Excel中的列,然后保存为XLSX)。

要通过电子邮件发送,您可能希望将其转换为HTML。

$filesForEmail = $files | select-object Name,@{name="Pending Since";Expression={$_.CreationTime}} | convertto-HTML;
send-mailmessage -to RECIPIENT -from FROM -subject "Your file listing" -body $filesForEmail -BodyAsHTML -smtpserver smtp.yourcompany.com

答案 1 :(得分:0)

您可以通过get-date运行并使用-format命令和标准DateTime格式选项(http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo(VS.85).aspx)来格式化CreationTime值。试试这一行:

write-host ("File Name: " + $file.Name, ", Pending Since : " + $(get-date $file.CreationTime -format "dddd, MMMM d, yyy h:mm tt")) -Fore Red

此处的主要部分是将$file.CreationTime替换为$(get-date $file.CreationTime -format "dddd, MMMM d, yyy h:mm tt")。这是一个相当标准的日期/时间格式,12小时格式。如果需要,您可以获得更详细的信息并更早地定义格式并仅输出相关信息(例如,如果days = 0,则从日期格式中排除)。