2016-07-06 9 views
3

PSCustomObjectsをカスタムタイプにキャストしたいと思います。単純な型のキャストは機能しますが、たとえばキャストを使用すると機能しません。型定義内のDateTime。 HashTableからカスタムタイプへのキャストは機能します。 PSCustomObjectからのキャストが期待通りに機能しないのはなぜですか?ここでPSCustomObjectsをPowerShellでDateTimeを使用してカスタムタイプにキャストできないのはなぜですか?

は例です:

Add-Type @" 
using System; 
public struct Test { 
    public DateTime date; 
} 
"@ 

$Properties = @{date=(Get-Date)} 
$CustomObject = New-Object -TypeName PSCustomObject -Property $Properties 

# Returns correct date: 
$TestObjectCastFromProperties = [Test]$Properties 
$TestObjectCastFromProperties 
$TestObjectCastFromProperties.GetType() 

# Returns wrong date 
$TestObjectCastFromCustomObject = [Test]$CustomObject 
$TestObjectCastFromCustomObject 
$TestObjectCastFromCustomObject.GetType() 
+0

'$プロパティ= @ {日付=(取得-日).PSObject.BaseObject}' – PetSerAl

答えて

4

、これは動作しませんなぜ私はあなたを伝えることはできません。でも、明示的な変換は失敗します。

[System.Management.Automation.LanguagePrimitives]::ConvertPSObjectToType(
    $CustomObject, [test], $true, [cultureinfo]::InvariantCulture, $false) 

出力:

date    
----    
01.01.0001 00:00:00 

しかし、あなたはTypePSCustomObjectを変換するには手作りの機能を使用することができます。

function Cast-CustomObject 
{ 
    Param 
    (
     [PsCustomObject]$obj, 
     [Type]$castType 
    ) 
    $properties = ($obj.PSObject.Properties | % { @{$_.Name = $_.Value}}) 
    [System.Management.Automation.LanguagePrimitives]::ConvertTo($properties, $castType) 
} 

用途:

Cast-CustomObject -obj $CustomObject -castType ([Test]) 

出力:

date    
----    
06.07.2016 08:52:01 
関連する問題