【问题标题】:Writing xml with powershell用powershell写xml
【发布时间】:2011-12-29 08:54:03
【问题描述】:

我有一个脚本,可以获取我需要的关于我的 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 并创建一个站点供经理使用

我该怎么做?

感谢您的帮助!

【问题讨论】:

    标签: xml powershell sharepoint-2010 powershell-2.0


    【解决方案1】:

    我会说你有 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 cmdlet 之一将其输出为 XML。可能是更强大的方法,因为您可以通过管道使用其他 PowerShell cmdlet。看起来像这样:

    $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 
    

    【讨论】:

    • out-file 似乎是在写 xml 对象签名,而不是实际的 xml 对象
    【解决方案2】:

    如果要将对象输出为 XML,可以尝试 Export-Clixml 命令。例如:

    目录 |导出 Clixml c:\temp\output.xml

    如果你想要直接的 HTML 页面,你可以使用命令 ConvertTo-Html :

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

    您可以使用 head、title、body 和 CSS 自定义后面的命令。

    【讨论】:

    • 如果有人想证明 xml 与他们所说的相反 - 不是人类可读/可写的,那就是非常好的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2020-07-28
    相关资源
    最近更新 更多