PowerShell自动删除过期数据
通常我們?cè)趯?duì)數(shù)據(jù)備份的時(shí)候,只需要對(duì)當(dāng)天的備份數(shù)據(jù)進(jìn)行保留,其他的數(shù)據(jù)都不需要保留,這時(shí)候就可以通過(guò)PowerShell腳本自動(dòng)將過(guò)期數(shù)據(jù)刪除。
例:在F:\dbbackup目錄下每天2:00都會(huì)自動(dòng)產(chǎn)生一個(gè)以當(dāng)前日期為名的文件,如“db_20120906.bak?、db_20121216.bak”,只需要對(duì)當(dāng)天數(shù)據(jù)進(jìn)行保留,其他全部刪除。
該腳本在每天的5:00執(zhí)行,編寫(xiě)思路如下:
1、?檢查當(dāng)天的備份文件是否已生成,如未生成,則退出
2、?將當(dāng)天產(chǎn)生的文件屬性設(shè)置為隱藏,然后刪除該目錄下的文件(設(shè)置為隱藏的文件不會(huì)被刪除)
3、?刪除該目錄下的所有文件
4、?將當(dāng)天產(chǎn)生的文件的隱藏屬性刪除
具體步驟如下:
1、?使用Test-Path命令判斷某個(gè)文件是否存在,例如:
?
如果該文件存在,則返回值為“True”,否則返回值為“False”。
如果要判斷當(dāng)天的文件是否存在,則需要先對(duì)其文件名進(jìn)行構(gòu)造,該文件名稱(chēng)可以分為“當(dāng)前路徑”和“文件名”兩部分,文件名又可以分為“db_”+“當(dāng)前日期”+“.bak”三部分,現(xiàn)在的關(guān)鍵就是如何取出當(dāng)前日期
使用Get-Date命令可以取出當(dāng)前時(shí)間,如下:
?
但我們只需要年、月、日,并且還必須是字符串類(lèi)型的。則需要先分別取出年、月、日,然后再構(gòu)造當(dāng)前日期,可以使用Get-Date中的Year、Month和Day屬性,命令如下:
?
當(dāng)前日期則可以寫(xiě)為:
(Get-Date).Year?+??(Get-Date).Month?+?(Get-Date).Day
再接著看,如果當(dāng)前月份小于10月,或者當(dāng)前日期小于10日,則(Get-Date).Month?和(Get-Date).Day的結(jié)果如下:
?
而自動(dòng)生成的文件名稱(chēng)中的月份和日期都是兩位數(shù)構(gòu)成,如09、06等。這時(shí)候就又有問(wèn)題了,還需要對(duì)月份和日期進(jìn)行判斷,如果小于10,則前面自動(dòng)補(bǔ)0,命令如下:
| If((Get-date).Month?-lt?10) {$month?=?"0"?+?(Get-date).Month} Else {$month?=?(Get-date).Month}? ? If((Get-date).Day?-lt?10) {$day?=?"0"?+?(Get-date).Day} Else ??{$day?=?(Get-date).Day} |
當(dāng)前日期則寫(xiě)為:
(Get-date).Year?+?$month?+?$day
其實(shí)在PowerShell中,可以通過(guò)UFormat?參數(shù)以UNIX格式顯示日期和時(shí)間,如下:
?
這樣一來(lái),則不需要再關(guān)心當(dāng)前月份是否小于10,當(dāng)前日期是否小于10的問(wèn)題了。
2、?設(shè)置當(dāng)前文件屬性為隱藏,在此可以使用批處理命令,如下:
attrib?F:\dbbackup\db_20121216.bak?+h
注:批處理命令可以在PowerShell中直接運(yùn)行。
3、?使用Remove-Item命令刪除文件,如下:
Remove-Item?F:\dbbackup\db_20121216.bak
完整的腳本命令如下:
| #構(gòu)造文件名 $path?=?"F:\dbbackup\" $date?=?get-date?-uformat?"%Y%m%d" $file?=$path?+?"db_"?+?$date?+?".bak" $file ? #測(cè)試文件是否存在 $result=test-path?-path?$file If?($result?-eq?"True") {attrib?$file?+h ?Remove-Item?F:\dbbackup\* ?attrib?$file?-h } |
?
總結(jié)
以上是生活随笔為你收集整理的PowerShell自动删除过期数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 限制CheckBoxList控件只能单选
- 下一篇: bacula 的安装、配置和运行