Я бы сказал, что у вас есть 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