Powershell 和日期函数的问题

Issue with Powershell and date functions

我有一个脚本可以从我们的 SQL 服务器资产中提取信息。脚本会提取一些日期(最后检查 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 是一个字符串,因此您正在比较 2 个字符串。您想比较 2 个日期:所以要么尝试

if ([DateTime]$lastDBCC_CHECKDB -lt $date.AddDays(-7)) 

如果您需要解析自定义日期格式或更多信息,请关注 this link