我需要自动将许多.NET对象添加到业务系统中。 PowerShell脚本需要读取XML输入文件并通过业务系统的API执行适当的更改。如何将XML映射到PowerShell中的对象上的动态属性?
我发现的问题是,对象有许多不同的类型,因此具有不同的属性。
这里是XML的例子:
$xmlItem.BusinessObjects.GetElementsByTagName("BusinessObject") | % {
$businessObject = $_
if ($businessObject.Action -eq "Add") {
$assemblyName = $businessObject.AssemblyName
$className = $businessObject.ClassName
$assembly = [Reflection.Assembly]::Load($assemblyName)
$obj = $assembly.CreateInstance($className)
### TODO: How to set properties on $obj ???
$api.AddBusinessObject($obj)
}
}
我可能需要把特定对象的属性到自己的XML元素,这样我可以循环:
<BusinessObject>
<Action>Add</Action>
<Id>{867B6C43-2A20-485D-A3E3-CBFCD50CA6F3}</Id>
<AssemblyName>ABC.BusinessObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=361ad75badc53918</AssemblyName>
<ClassName>ABC.BusinessObjects.HealthService</ClassName>
<!-- Properties specific to object -->
<HealthServiceName>Jo's GP Super Center</HealthServiceName>
</BusinessObject>
<BusinessObject>
<Action>Add</Action>
<Id>{867B6C43-2A20-485D-A3E3-CBFCD50CA6F3}</Id>
<AssemblyName>ABC.BusinessObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=361ad75badc53918</AssemblyName>
<ClassName>ABC.BusinessObjects.Patient</ClassName>
<!-- Properties specific to object -->
<PatientName>Anna Smith</PatientName>
</BusinessObject>
脚本的相关部分通过他们。我不确定的是在该循环内部要做什么。
假设每个属性的XML元素名称都与$ obj属性名称相匹配,那么如何动态访问并设置相应XML值的属性?