我试图在日志文件中写入此脚本的开始和结束日期。 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
答案 0 :(得分:0)
你的问题似乎是你试图不管什么。你的foreach循环之后有一个|
,但是所有对象都在循环中被捕获,所以没有任何对象可以用于管道。只需删除该管道字符即可使用
答案 1 :(得分:0)
看起来你遇到了一个范围问题。 var <{1}}在 foreach 循环之外不存在,因此一个简单的解决方法是在顶部定义它
$EndTime
答案 2 :(得分:0)
删除你的最终|来自你的对象在我的测试中工作。还要确保存在满足where-object的目录,因为这也会留下空白的结束时间。