これは私がこれまでに見つけた最高の方法です。キーは、これは、それは非常に簡単ですマッピングし、ハッシュテーブルを返し、PSObjectに.BaseObject
にアクセスすることです:
CreateMap<Hashtable, SOResult>()
.ForMember(o => o.A, x => x.MapFrom(f => f["A"]))
.ForMember(o => o.B, x => x.MapFrom(f => f["B"]));
完全な作業プログラム:残念ながら
static void Main(string[] args)
{
Mapper.Initialize(c => c.AddProfile<SOProfile>());
var script = "@{ A = (Get-Date); B = 'Hello World' };";
var instance = PowerShell.Create();
instance.AddScript(script);
var invokeResult = instance.Invoke();
var psObject = invokeResult.First().BaseObject;
var soResult = Mapper.Map<SOResult>(psObject);
Debug.Assert(soResult != null && !string.IsNullOrWhiteSpace(soResult.B));
}
class SOProfile : Profile
{
public SOProfile()
{
CreateMap<Hashtable, SOResult>()
.ForMember(o => o.A, x => x.MapFrom(f => f["A"]))
.ForMember(o => o.B, x => x.MapFrom(f => f["B"]));
}
}
あなたは、単純なプロパティが複数ある場合は、このPSObjectからHashtableへの子プロパティを繰り返し変換する必要があるため、苦痛になります。