Powershell和日期函数的问题



我有一个脚本,它从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)) 

如果您需要解析自定义日期格式或更多信息,请点击此链接。

相关内容

  • 没有找到相关文章

最新更新