我有一个脚本,它从SQL server属性中提取信息。脚本提取一些日期(最后检查DBCC(,并进行一些老化计算。
代码中有问题的部分在这里:
$lastDBCC_CHECKDB=$database.ExecuteWithResults("DBCC DBINFO () WITH TABLERESULTS").Tables[0] | Where-Object {$_.Field -eq "dbi_dbccLastKnownGood"} | Select-object Value
$lastDBCC_CHECKDB=$lastDBCC_CHECKDB.value -f (get-date)
$lastDBCC_CHECKDB=$lastDBCC_CHECKDB.Substring(0,19) | get-date -format 'dd/MM/yyyy HH:mm:ss'
Add-Member -InputObject $dbinfo -MemberType NoteProperty -Name 'Last CheckDBCC' -Value $lastDBCC_CHECKDB
$DBCCProblem = "None"
if ($lastDBCC_CHECKDB -lt $date.AddDays(-7)) { $DBCCProblem = "No CheckDBCC in the last week" }
if ($lastDBCC_CHECKDB -eq "01/01/1900 00:01:00") { $DBCCProblem = "CheckDBCC has never run" }
Add-Member -InputObject $dbinfo -MemberType NoteProperty -Name 'DBCC Issues' -Value $DBCCProblem
我的日期计算正在进行,但是,看起来这个过程是基于不同格式的当前$date
进行计算的。
无论我尝试什么,似乎都无法在AddDays
函数不失败的情况下强制$date
为正确的格式。
在我的Powershell终端上,如果运行$date
(在get-date
cmdlet的脚本中设置(,我会得到:
09 July 2015 15:42:26
但是,如果我运行:
$date=get-date
我得到了错误的格式:
09/07/2015 15:42:26
请注意日期和月份(美国格式(。尽管我指定了日期格式"dd/MM/yyyy HH:MM:ss",但我仍在根据该日期进行计算。
同样,如果我在脚本中将$date
设置为:
$date=Get-date
我的AddDays
计算功能失败,带有:
Method invocation failed because [System.String] does not contain a method named 'AddDays'.
At ...SQLServerBackupSummary.ps1:122 char:21
+ if ($lastDBCC_CHECKDB -lt $now.AddDays(-7)) ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
指定添加日期时间无效:
$lastDBCC_CHECKDB.Datetime -lt $date.AddDays(-7))
这似乎把一切都搞砸了。
我对Powershell还很陌生,但以前从未在其他脚本语言中进行过日期转换。
我认为这与日期格式无关。基于线路:
if ($lastDBCC_CHECKDB -eq "01/01/1900 00:01:00")
我猜$lastDBCC_CHECKDB是一个字符串,因此您正在比较两个字符串。你想比较两个日期:所以要么试试
if ([DateTime]$lastDBCC_CHECKDB -lt $date.AddDays(-7))
如果您需要解析自定义日期格式或更多信息,请点击此链接。