2015-11-03 3 views
3

Итак, у меня есть XML, который я создаю, а затем пытаюсь Сортировать его на основе элемента, но он не работает.Сортировка XML с использованием Powershell

Мой код

$xml = [xml](Get-Content $args) 

function readServersfromXML () { 

    $xml.Settings.Server | select -ExpandProperty Name 
} 

function readServerServicesfromXML ($server) { 
    $xml.Settings.Server | Where-Object {$_.Name -eq $server} | Select-Object -ExpandProperty Services 
} 

function getServerServiceStatus ($servers) { 

    foreach ($server in $servers) { 
     $services = (readServerServicesfromXML $server) 
     foreach ($service in $services.ChildNodes) { 
     $service | Sort-Object StartOrder 
     } 
    } 
} 

$servers = readServersfromXML 
getServerServiceStatus ($servers) 

XML

<?xml version="1.0"?> 
<Settings> 
    <Server> 
    <Name>Server1</Name> 
    <StartOrder>1</StartOrder> 
    <Services> 
     <Service> 
     <Name>Service1</Name> 
     <StartOrder>1</StartOrder> 
     </Service> 
     <Service> 
     <Name>Service2</Name> 
     <StartOrder>2</StartOrder> 
     </Service> 
     <Service> 
     <Name>Service4</Name> 
     <StartOrder>4</StartOrder> 
     </Service> 
     <Service> 
     <Name>Service3</Name> 
     <StartOrder>3</StartOrder> 
     </Service> 
    </Services> 
    </Server> 
</Settings> 

Я хотел бы ожидать выход быть как этот

Name              StartOrder 
----              ---------- 
Service1             1 
Service2             2 
Service3             3 
Service4             4 

Выходной сигнал я получаю это:

Name              StartOrder 
----              ---------- 
Service1             1 
Service2             2 
Service4             4 
Service3             3 

У кого-нибудь есть идея? Я попытался запустить StartOrder в [int], но это тоже не работает. Любая помощь предоставляется.

+0

Вы сортировки каждую строку по отдельности. Вы пробовали сортировать '$ services.ChildNodes' вместо этого? –

ответ

1

Это модифицированная версия функции отсортированные по StartOrder в порядке возрастания для меня:

function getServerServiceStatus ($servers) 
{ 
    foreach ($server in $servers) 
    { 
     $services = (readServerServicesfromXML $server) 
     $services.ChildNodes | Sort-Object { [int] $_.StartOrder} 
    } 
} 

Выход:

Name              StartOrder 
----              ---------- 
Service1             1 
Service2             2 
Service3             3 
Service4             4 
+0

Volkan вы рок! Спасибо за помощь. Это именно то, что мне нужно. Онлайновый справочный документ не очень помогает новичкам. Можете ли вы предложить какие-либо онлайн-ресурсы для изучения возможностей PowerShell. – todd1215

+0

Спасибо за добрые слова, Тодд. Что касается ресурсов, я обычно люблю курсы Pluralsight, поскольку они охватывают различные аспекты. –

Смежные вопросы