我在編寫一個PowerShell腳本,它將生成一個包含兩列的信息表:名稱和日期(將從第三方應用程序中檢索 - 在本例中爲svn。可執行程序)。在PowerShell中解析日期時間
整體腳本運行良好,但我很努力地獲取服務器發送回DataTable的日期。這裏是我的腳本的簡化版本:
# Set up a DataTable and initialise columns
$table = New-Object system.Data.DataTable 「Test Table」
$col1 = New-Object system.Data.DataColumn Name,([string])
$col2 = New-Object system.Data.DataColumn DateFromServer,([DateTime])
$table.columns.add($col1)
$table.columns.add($col2)
# Create a new row and add the data
$row = $table.NewRow()
$row.Name = "Test"
$lastCommit = GetDateFromExternalApp
$lastCommit.GetType() # this returns DateTime as I would expect
$row.DateFromServer = $lastCommit # this throws up an error
$table.Rows.Add($row)
# Output the table
$table | Format-Table -AutoSize
# This function simulates what the actual function does
# (the real one goes to SVN and pulls down data, but it
# ends up with the same resulting date)
Function GetDateFromExternalApp
{
$externalAppDate = "2012-09-17T16:33:57.177516Z"
return [DateTime]($externalAppDate)
}
的問題(在上面的腳本註釋說明)是在功能似乎愉快地返回DateTime實例,當我嘗試添加到錶行的這DateFromServer列它扔了一個錯誤:
Exception setting "DateFromServer": "Unable to cast object of type 'System.Management.Automation.PSObject' to type 'System.IConvertible'.Couldn't store <18/09/2012 2:33:57 AM> in DateFromServer Column. Expected type is DateTime." At line:13 char:6
+ $row. <<<< DateFromServer = $lastCommit
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
然而,調用$ lastCommit.GetType()表示,這確實是一個DateTime - 事實上,如果我在腳本的某處添加此行:
$lastCommit
那麼我可以看到一個很好的格式化的日期時間,這表明它確實是分析它,並正確地將其轉換:
Date : 18/09/2012 12:00:00 AM
Day : 18
DayOfWeek : Tuesday
DayOfYear : 262
Hour : 2
Kind : Local
Millisecond : 177
Minute : 33
Month : 9
Second : 57
Ticks : 634835324371775160
TimeOfDay : 02:33:57.1775160
Year : 2012
DateTime : Tuesday, 18 September 2012 2:33:57 AM
這樣我,爲什麼我得到上述異常挺納悶。我意識到PowerShell的功能與C#的返回值不同,但它在我看來就像函數返回正確的類型!
謝謝!這很好。是的,它對我來說似乎並不合邏輯,但是我又是新來的PowerShell,所以不確定標準等等。 – John