首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >powershell脚本中的异常没有意义

powershell脚本中的异常没有意义
EN

Stack Overflow用户
提问于 2019-12-28 14:35:31
回答 2查看 92关注 0票数 1

我们在Windows2016服务器上有一个Server,它创建一个.MDF和日志文件的server备份,按计划在23:30工作日备份一次。我创建了一个内务脚本来开始删除这些.bak文件,这些文件都是两个工作日以上的。

然而,星期二的检查,功能异常。在下面的脚本中,AddDays(4)保留星期一、星期五和星期四的文件,而不仅仅是星期一和星期五的文件。但如果我将其更改为AddDays(3),它只保留周一的文件。

为什么这是这样的行为?

代码语言:javascript
运行
复制
# Determine day of week
$weekDay = (get-date).DayOfWeek.ToString()
$firstAbbrevCheck = $weekDay.SubString(0,3)
# write-host $firstAbbrevCheck
# Write date to log file to ensure sripts ran
$todaysDate = (get-date).ToString("ddMMyyyy")
Write-output $todaysDate | Out-file <path>\HouseKeepLog.txt -append
# If not a sunday or Monday then process
if($firstAbbrevCheck -ne "Sun") {
  if($firstAbbrevCheck -ne "Mon") {
    $secondAbbrevCheck = $weekDay.SubString(0,2)
    # If retaining two work days of backups then for Tuesday delete 
      files greater than 4 days old
    if($secondAbbrevCheck -eq "Tu") {
     Get-ChildItem –Path <Path to backup folder> -recurse -Filter 
       *.bak -exclude master*, msdb* | Where-Object 
      {($_.LastWriteTime -lt (Get-Date).AddDays(-4))} | Remove-Item
    }
    else {
    # Else Wed - Sat and delete files greater than 2 days old 
    Get-ChildItem –Path <Path to backup folder> -recurse -Filter 
      *.bak -exclude master*, msdb* | Where-Object 
      {($_.LastWriteTime -lt (Get-Date).AddDays(-2))} | Remove-Item
    }
  }
 }  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-28 16:24:17

您也可以使用UFormat。下面是操作步骤:

代码语言:javascript
运行
复制
$today = Get-Date 
$wd = Get-Date -UFormat "%A"
Write-output ('{0:ddMMyyyy}' -f $today >><path>\HouseKeepLog.txt
if (($wd -notmach "Su.*") -and ($wd -notmatch "Mo.*")) {
   $rd = switch -Regex ($wd) {
     "Tu.*" { $today.AddDays(-4).Date }    
     default { $today.AddDays(-2).Date }
    }
 Get-ChildItem "Path to backup folder" -Recurse -Filter "*.bak" -Exclude "master*", "msdb*" -File | 
            Where-Object {($_.LastWriteTime -lt $rd)} | 
            Remove-Item
}
票数 1
EN

Stack Overflow用户

发布于 2019-12-28 15:19:39

"Tu“不是"Tue”顺便说一下,您可以将枚举与字符串进行比较:

代码语言:javascript
运行
复制
(get-date).dayofweek -eq 'saturday'
True

'saturday' -eq (get-date).dayofweek
True

Fyi,下面是一周中的一天的布局:

代码语言:javascript
运行
复制
(get-date).dayofweek.gettype()               

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DayOfWeek                                System.Enum

0..6 | foreach { [system.dayofweek]$_ } 

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59511831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档