求助:PowerShell将netdom query fsmo输出格式化为HTML报告时的列对齐问题
求助:PowerShell将netdom query fsmo输出格式化为HTML报告时的列对齐问题
老哥,我太懂你这种对着代码反复调试却死活达不到预期的憋屈感了!你的问题核心很明确:你只是把netdom query fsmo的每一行内容直接塞进了左列单元格,没把输出拆分成「FSMO角色名」和「对应服务器」两个部分,所以所有内容都挤在左边了。
咱们直接来改代码,一步到位解决这个问题:
首先,netdom query fsmo的输出每行都是「角色名 + 多个空格 + 服务器名」的结构,所以咱们可以用正则分割的方式把每行拆成两部分,然后分别放到左右两个单元格里,还能给右列加上你想要的绿色背景。
修改后的完整代码片段如下:
# Execute 'netdom query fsmo' command $fsmoOutput = netdom query fsmo # Split the output into lines and remove empty lines $fsmoLines = $fsmoOutput -split "`r?`n" | Where-Object { $_ -ne '' } # Start adding a new table for FSMO roles Add-Content $report "<table width='100%' border='1'>" # 加border是为了方便看表格结构,不需要可以删掉 Add-Content $report "<tr bgcolor='LightSteelBlue'>" Add-Content $report "<td align='left'><B>FSMO Role</B></td>" Add-Content $report "<td align='left'><B>Assigned Server</B></td>" Add-Content $report "</tr>" # 循环处理每一行FSMO输出,拆分角色和服务器 foreach ($line in $fsmoLines) { # 用至少两个空格分割成角色名和服务器名两部分,限制只拆2段避免意外 $role, $server = $line -split '\s{2,}', 2 # 确保拆分成功后再生成表格行 if ($role -and $server) { Add-Content $report "<tr>" Add-Content $report "<td>$role</td>" Add-Content $report "<td bgcolor='LightGreen'>$server</td>" # 右列设置绿色背景 Add-Content $report "</tr>" } } # 关闭表格标签 Add-Content $report "</table>"
我给你拆解下关键改动点:
- 把原来的合并表头改成了两列,明确区分角色和服务器
- 用
-split '\s{2,}', 2精准拆分每行内容:\s{2,}匹配两个及以上的空格(这是netdom输出里角色和服务器的分隔符),2限制只拆成两段,避免万一角色名里有空格(虽然FSMO角色没有,但留个保险)导致拆分错误 - 给右列单元格加上了
bgcolor='LightGreen',实现你想要的绿色效果 - 循环每一行,把拆分后的角色放左列,服务器放右列,这样就不会再挤在一起了
你把这段代码替换掉你原来的表格生成部分,再运行试试,应该就能得到你想要的左右分列效果啦!
备注:内容来源于stack exchange,提问作者John R Smith
相关产品推荐
相关产品推荐

