PowerShell脚本执行的结束时间

时间:2014-05-06 14:03:06

标签: powershell

我试图在日志文件中写入此脚本的开始和结束日期。 startdate不是问题,但结束日期显然没有写入日志。

   
$Target = "\\share\dir1\dir2"

# Set start time
$StartTime = (Get-Date).ToShortDateString()+", "+(Get-Date).ToLongTimeString()

Get-ChildItem -Directory -Path $Target | 
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-60) } | % {
        $folder = $_;
        Remove-Item $folder.FullName -Recurse -Force | Out-Null
        $folder.FullName  
        # Set end time 
        $EndTime = (Get-Date).ToShortDateString()+", "+(Get-Date).ToLongTimeString()   
        } | 

# Write footer to log
Write-Output ($Footer = @"

$("-"*79)

   Start Time          : $StartTime
   End Time            : $EndTime

$("-"*79)
"@)

Out-File $Target\Auto_Clean.log -Append -InputObject $Footer

# Clean up variables at end of script
$Target=$StartTime=$EndTime = $null

感谢Stackoverflow的帮助,我找到了完整的答案。

解决方案:

<#  Author: Me@site.com 
    ########## Remove folders older than x days
    2014/05/06 Script born 
    2014/05/07 Add total runtime of the script to the logfile #>

#================= VARIABLES ==================================================
$Target = "\\Share\dir1\dir2"
$OlderThanDays = "60"
$Logfile = "$Target\Auto_Clean.log"

#================= BODY =======================================================
# Set start time
$StartTime = (Get-Date).ToShortDateString()+", "+(Get-Date).ToLongTimeString()

Write-Output "`nDeleting folders that are older than $OlderThanDays days:`n"

Get-ChildItem -Directory -Path $Target | 
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$OlderThanDays) } | ForEach {
        $Folder = $_;
        Remove-Item $Folder.FullName -Recurse -Force | Out-Null
        $Folder.FullName } | Tee-Object $LogFile -Append # Output folder names to console & logfile at the same time

# Set end time & calculate runtime
$EndTime = (Get-Date).ToShortDateString()+", "+(Get-Date).ToLongTimeString()
$TimeTaken = New-TimeSpan -Start $StartTime -End $EndTime

# Write footer to log
Write-Output ($Footer = @"

$("-"*79)
   Start Time          : $StartTime
   End Time            : $EndTime
   Total runtime       : $TimeTaken
$("-"*79)
"@)

# Create logfile
Out-File $LogFile -Append -InputObject $Footer

# Clean up variables at end of script
$Target=$StartTime=$EndTime=$OlderThanDays = $null

3 个答案:

答案 0 :(得分:0)

你的问题似乎是你试图不管什么。你的foreach循环之后有一个|,但是所有对象都在循环中被捕获,所以没有任何对象可以用于管道。只需删除该管道字符即可使用

答案 1 :(得分:0)

看起来你遇到了一个范围问题。 var <{1}}在 foreach 循环之外不存在,因此一个简单的解决方法是在顶部定义它

   
$EndTime

答案 2 :(得分:0)

删除你的最终|来自你的对象在我的测试中工作。还要确保存在满足where-object的目录,因为这也会留下空白的结束时间。

相关问题