Написание XML с PowerShell - PullRequest
       32

Написание XML с PowerShell

1 голос
/ 15 ноября 2011

У меня есть скрипт, который получает всю необходимую информацию о моей ферме SharePoint:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null

$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local 
$websvcs = $farm.Services | where -FilterScript {$_.GetType() -eq [Microsoft.SharePoint.Administration.SPWebService]} 
$webapps = @()

foreach ($websvc in $websvcs) { 
           write-output "Web Applications" 
           write-output "" 
    foreach ($webapp in $websvc.WebApplications) { 
        write-output "Webapp Name -->"$webapp.Name 
           write-output "" 
           write-output "Site Collections" 
           write-output "" 
    foreach ($site in $webapp.Sites) { 
        write-output "Site URL --> -->" $site.URL 
           write-output "" 
           write-output "Websites" 
           write-output "" 
    foreach ($web in $site.AllWebs) { 
        write-output "Web URL --> --> -->" $web.URL 
           write-output "" 
           write-output "Lists" 
           write-output "" 
    foreach ($list in $web.Lists) { 
           write-output "List Title --> --> --> -->" $list.Title 
           write-output "" 
    }

    foreach ($group in $web.Groups) { 
           write-output "Group Name --> --> --> -->" $group.Name 
           write-output ""

    foreach ($user in $group.Users) { 
           write-output "User Name --> --> --> -->" $user.Name 
           write-output "" 
    } 
    }

    }

    }

    } 
}

Я хочу сделать вывод в XML-файл, а затем подключить XML-файл к HTML и создать сайт для менеджера

как я могу это сделать?

спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

Я бы сказал, что у вас есть 2 варианта, которые должны быть довольно простыми:

Простейшим способом было бы вместо использования записи-вывода создать строку как ваш xml.

$procs = get-Process

$xml = "<xml>"
foreach($proc in $procs)
{
    $xml += "<process name='" + $proc.Name + "' id='Proc_"+$proc.Id+"'>"
    $xml += "<modules>"

    foreach($module in $proc.Modules)
    {
        $xml += "<module>"
        $xml += $module.ModuleName
        $xml += "</module>"
    }
    $xml += "</modules>"
    $xml += "</process>"
}

$xml += "</xml>"

$xml | out-File -FilePath c:\temp\proc1.xml

Или - вы можете создать свой вывод как psobject, а затем попробовать один из командлетов PowerShell, чтобы вывести его в виде XML. Возможно, это более надежный способ сделать это, поскольку вы можете использовать другие командлеты PowerShell через конвейер. Это будет выглядеть примерно так:

$procs = get-Process

$processObject = @()
foreach($proc in $procs)
{
    $procInfo = new-Object PSObject
    $procInfo | add-Member NoteProperty -Name "Process" $proc.Name
    $procInfo | add-Member NoteProperty -Name "ID" $proc.Id
    $moduleInfo = @()   
    foreach($module in $proc.Modules)
    {           
        $moduleInfo += $module.ModuleName
    }   
    $procInfo | add-Member NoteProperty -Name "Module" $moduleInfo
    $processObject += $procInfo
}

$processObject | export-Clixml c:\temp\procs.xml 
2 голосов
/ 15 ноября 2011

Если вы хотите вывести объекты в XML, вы можете попробовать команду Export-Clixml. Например:

dir | Export-Clixml c: \ temp \ output.xml

Если вам нужна прямая HTML-страница, вы можете использовать команду ConvertTo-Html:

dir | ConvertTo-Html> c: \ temp \ output.html

Вы можете настроить более позднюю команду с заголовком, заголовком, телом и CSS.

...