Powershell:检查今天的备份是否存在



我已经设置了从不同服务器上的各种SQL数据库(总共18个)到NAS上的一组文件夹的每日自动拷贝,每个文件夹都包含每日.bak备份(服务器a->C:\backups\a\、服务器B->C:\backups \B\等)。我需要一个powershell脚本,它(每天)检查每个文件夹,看看拷贝是否成功。我希望它将复制的文件的名称、大小以及未复制的文件目录(即当天的.bak应该所在的文件夹)写入日志。我有一个数组,其中列出了目标文件夹。到目前为止,我已经复制了我所拥有的内容,但我不知道如何检查"if object’s lastwritetime=todaysdate",并记录它是否存在。如果这让人感到困惑,很抱歉,这是我使用Powershell的第一周。如有任何见解,我们将不胜感激。

foreach ($folder in $array.destination)
  {gci | sort-object lastwritetime -descending |select -first 1
If
   ($object lastwritetime.Date -eq (Get-Date).Date  #this is wrong, but generally what I want to do
        | Out-File "C:Script.log" | ft * -autosize)
Else
  (
  **WRITE DESTINATION OF TODAY'S MISSING .bak TO LOG***
  )
    }

不需要格式化,如果需要格式化,则必须在管道传输到输出文件之前进行格式化。看看这是否有助于你朝着正确的方向开始:

$file=dir -path c:scripts | sort LastWriteTime | select -last 1
if ($file.LastWriteTime.ToShortDateString() -eq (get-date).ToShortDatesTring()) {
 #file dates match
 $file | Out-File Log.txt -append
}
else {
 #dates do not match
 Write "destination missing backup log"
}

如果任何备份失败,此脚本将检查数据库并进行标记。它检查完整备份、差异备份和日志备份。

#Backup Check Version 1.0.
#List Server Name from 
$ServerList = Get-Content "D:PSScriptsBackupScriptServerList.txt" 
#Output file Location : Put is IIS if you want to publish 
$OutputFile = "c:IISBackupReport.htm" 
 $HTMLHDR=""
 $BODYRED =""
 $BODYGRN=""
 $now=get-date
 $FOOTER=""
$HTMLHDR += '<style type="text/css"> 
    #Header{font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;width:700;border-collapse:collapse;} 
    #Header td, #Header th {font-size:12px;border:1px solid #98bf21;padding:3px 7px 2px 7px;} 
    #Header th {font-size:10px;text-align:center;padding-top:5px;padding-bottom:4px;background-color:#A7C942;color:#fff;} 
    #Header tr.alt td {color:#000;background-color:#EAF2D3;} 
    </Style>' 
$HTMLHDR += "<HTML><HEAD><TITLE>Backup Page</TITLE></HEAD><BODY>
        <p align=Center><font size=4 face=Bodoni MT color=#003333><B>Backup Report :Location</B></font></p>
        <p align=Center><font face=Bodoni MT color=Green size=3>Last Pulled : $now IST</font></P>
        <center><Table border=1 cellpadding=0 cellspacing=0 width=900 id=Header aling ='center'> 
        <TR> 
            <TH><B>Server Name</B></TH> 
            <TH><B>Database Name</B></TH> 
            <TH><B>RecoveryModel</B></TD> 
            <TH><B>Last Full Backup Date</B></TH> 
            <TH><B>Last Differential Backup Date</B></TH> 
            <TH><B>Last Log Backup Date</B></TH> 
        </TR>"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null 
## Function if you need to skip or include any specific DB
function CheckDBName ($DBName){
$NameFlage ="true"
    if($DBName -like "*DBName*")    {$NameFlage ="false"}   
    return $NameFlage 
}
##Get Backup details 
ForEach ($ServerName in $ServerList) 
{ 
    if($ServerName -ne ""){
    $DT = Get-WmiObject -Class Win32_LocalTime -ComputerName $servername
    $DateTime = (Get-Date -Day $DT.Day -Month $DT.Month -Year $DT.Year -Minute $DT.Minute -Hour $DT.Hour -Second $DT.Second)
    $SQLServer = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName  
    Foreach($Database in $SQLServer.Databases) 
        {
        $FLAGE="false"
        $color="Green"  
        $model=$($Database.RecoveryModel)
        $DBName=$Database.Name
        $FBKP=($DateTime-$Database.LastBackupDate).days
        $DBKP=($DateTime-$Database.LastDifferentialBackupDate).days
        $LBKP=($DateTime-$Database.LastLogBackupDate).hours
        $WDay=$DateTime.DayOfWeek
            if($(CheckDBName($Database.name)) -eq "true")   {
                            $tmp= "<tr><TD>$($Servername)</TD><TD>$($Database.Name)</TD><TD>$model</TD>"            
                if($FBKP -ge 7){
                        $color="RED"
                        $FLAGE="true"
                        }
                if($WDay -like "mon*"){
                        if($FBKP -ge 4){
                        $color="RED"
                        $FLAGE="true"
                        }}
                            $tmp+="<TD bgcolor='$color'>$($Database.LastBackupDate)</TD> "
                            $color="Green"
                if($DBKP -ge 1 -AND $FBKP -gt 1){
                    $color="RED"
                    $FLAGE="true"
                    }
                            $tmp +="<TD bgcolor='$color'>$($Database.LastDifferentialBackupDate)</TD>"
                            $color="Green"
                if($Model -like "*Full*"){
                if($LBKP -ge 2){
                    $color="RED"
                    $FLAGE="true"
                }   }
                            $tmp +="<TD bgcolor='$color'>$($Database.LastLogBackupDate)</TD> </TR>" 
                            $color="Green"
                    if($FLAGE -eq "TRUE"){$BODYRED +=$tmp}
                    else {$BODYGRN+=$tmp}
                }
        }
    }
    }
$FOOTER+= "</Table></BODY></HTML>" 
$FILE=$HTMLHDR+$BODYRED+$BODYGRN+$FOOTER
$FILE | Out-File $OutputFile
Exit
###########END#########################

最新更新