Ich habe diese XML-Dateistruktur, wobei der Name des übergeordneten Ordners die Auftragsnummer ist. Im Ordner befindet sich dann eine Datei mit demselben Namen wie der Ordner mit der Erweiterung .xml.Powershell XML-Skript zum Extrahieren von Wert aus <Eigenschaftsname = "xx" value = "yy" />
Powershell verwenden, für jeden Ordner und XML-Datei, muss ich den psModelled
Wert des ersten Auftreten des <Property name="ProcessStatusID" value="psModelled"/>
Tag abzurufen
Ich kann nicht herausfinden, wie der Wert der Eigenschaft zu erhalten. Hoffe, dass mir jemand mit diesem Code helfen kann.
Wenn der Wert = 'psClosed', dann muss ich den gesamten Ordner in einen anderen Archivordner verschieben, aber ich mache mir darüber Sorgen, sobald es mir gelingt, den Wert der Eigenschaft zu erhalten.
<?xml version="1.0"?>
<DentalContainer version="2016-1">
<Object name="MainObject" type="TDM_Container">
<Object name="OrderList" type="TDM_List_Order">
<List name="Items">
<Object type="TDM_Item_Order">
<Property name="IntOrderID" value="6862911"/>
<Property name="TraySystemType" value="stNone"/>
</Object>
</List>
</Object>
<Object name="ModelJobList" type="TDM_List_ModelJob">
<List name="Items">
<Object type="TDM_Item_ModelJob">
<Property name="ModelJobID" value="MJA98D88967006476CB010B2C41328F5A4"/>
<Property name="OrderID" value="6862911"/>
</Object>
</List>
</Object>
<Object name="ModelElementList" type="TDM_List_ModelElement">
<List name="Items">
<Object type="TDM_Item_ModelElement">
<Property name="ModelElementID" value="MEA4A179CFB6B74BC2A38373D720629ECE"/>
<Property name="ProcessStatusID" value="psModelled"/>
<Property name="ValidationResult" value="vrPassed"/>
</Object>
</List>
</Object>
<Object name="ElementList" type="TDM_List_Element">
<List name="Items">
<Object type="TDM_Item_Element">
<Property name="ElementID" value="TEC89CECF82CAD4F54B3E26A56E40971FA"/>
<Property name="CacheTypeClass" value="teAbutment"/>
</Object>
</List>
</Object>
</Object>
</DentalContainer>
Hier ist mein Code so weit. Ich weiß, dass es Rookie-Code ist, aber ich bin ein PowerShell-Rookie.
Get-ChildItem C:\temp\pwrshell2 | ForEach-Object -Process {
if ($_.PSIsContainer)
{
# // Store subfolder path in a variable
$sFolderPath = $_.FullName
$sFolderName = Split-Path $sFolderPath -Leaf
if ($sFolderName -eq '6862911')
{
Get-ChildItem $sFolderPath | Where {$_.Name -like $sFolderName + '.xml'} | foreach{
$sFilepath = $_.FullName
'FilePath='+$sFilepath
'length='+$sFilepath.Length
[xml]$xml = Get-Content $sFilepath
$sNode = $xml.selectNodes('//Property') | select Name
$sNode+'-->sNode length='+$sNode.Length
if ($sNode -eq 'ProcessStatusID')
{
'inside the loop'
}
}
}
}
}
Und hier ist die aktuelle Ausgabe
FilePath=C:\temp\pwrshell2\6862911\6862911.xml
length=37
name
----
IntOrderID
TraySystemType
ModelJobID
OrderID
ModelElementID
ProcessStatusID
ValidationResult
ElementID
CacheTypeClass
-->sNode length=
9
Wenn ich Sie richtig verstehe, sollten Sie etwas wie folgt versuchen: '$ xml.SelectNodes ('// Eigenschaft') | ? {$ _. name -eq "ProcessStatusID"} | Wählen Sie "First 1 -ExpandProperty Wert" – n01d
Super, danke n01d. Perfekt!! – Joe