powershell - ConvertTo-HTML 参数无法正常工作
问题描述
我正在尝试编写一个 PowerShell 文件以使用此 CMD 命令分析 Exchange 配置:
PowerShell.exe -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; . 'C:\test2.ps1' | ConvertTo-Html | Out-File -FilePath C:\test.html"
Test2.ps1
代码:
Write-Output "Test"
Get-SenderIDConfig | fl -Property Enabled
Get-SenderReputationConfig | fl -Property SenderBlockingEnabled
Write-Output "List All SendConnectors"
Get-SendConnector
Write-Output "Ignoe STARTTLS SendConnectors"
Get-SendConnector | fl -Property IgnoreSTARTTLS
通过直接将输出重定向到 TXT 文件 ( >> output.txt
) 可以正常工作,但问题是我使用 得到不可读的输出ConvertTo-HTML
,如下图所示:
编辑:这是想要的结果
解决方案
您不能将这样的输入传递给ConvertTo-Html
并期望 cmdlet 神奇地生成所需格式的报告。cmdlet 不能那样工作。它通常用于将相同类型的对象列表转换为表格输出,例如,您可以从中获取输出Get-SendConnector
并制作 HTML 表格:
Get-SendConnector | Select-Object Identity, AddressSpaces, Enabled | ConvertTo-Html
但是,这本身将创建一个完整的 HTML 页面。由于您还需要页面中的其他(非表格)数据,您可以将表格创建为片段,并将该表格和其他数据插入到字符串模板中,例如:
$head = @'
<style>
/* put style definitions here */
h1 { font-size: 20px; }
h2 { font-size: 16px; }
/* ... */
</style>
'@
$fragments = @()
$fragments += '<p>Enabled: {0}</p>' -f (Get-SenderIDConfig).Enabled
$fragments += '<p>SenderBlockingEnabled: {0}</p>' -f (Get-SenderReputationConfig).SenderBlockingEnabled
$fragments += Get-SendConnector |
Select-Object Identity, AddressSpaces, Enabled |
ConvertTo-Html -Fragment -PreContent '<h2>List All SendConnectors</h2>'
$fragments += Get-SendConnector |
Select-Object Identity, IgnoreSTARTTLS |
ConvertTo-Html -Fragment -PreContent '<h2>Ignore STARTTLS Connectory</h2>'
ConvertTo-Html -Head $head -PreContent '<h1>Test</h1>' -PostContent $fragments |
Set-Content 'output.html'
有关更多信息,请参阅此Scripting Guy文章。
您还可以构建自己的 HTML 模板并用值填充它:
$template = @'
<html>
<head>
<style>...</style>
</head>
<body>
<p>Enabled: {0}</p>
<p>SenderBlockingEnabled: {1}</p>
{2}
{3}
</body>
</html>
'@
$enabled = (Get-SenderIDConfig).Enabled
$blockingEnabled = (Get-SenderReputationConfig).SenderBlockingEnabled
$connectors = Get-SendConnector |
Select-Object Identity, AddressSpaces, Enabled |
ConvertTo-Html -Fragment -PreContent '<h2>List All SendConnectors</h2>' |
Out-String
$ignoreSTARTTLS = Get-SendConnector |
Select-Object Identity, IgnoreSTARTTLS |
ConvertTo-Html -Fragment -PreContent '<h2>Ignore STARTTLS Connectory</h2>' |
Out-String
$template -f $enabled, $blockingEnabled, $connectors, $ignoreSTARTTLS |
Set-Content 'output.html'
推荐阅读
- forms - 如何在不引发浏览器安全警报的情况下将表单从 HTTPS 页面发送到 HTTP 链接
- azure-cognitive-search - 如何在 Azure 搜索中执行不区分大小写的“OrderBy”
- macos - Groovy shell 脚本无法识别 aws 命令
- python - 替代数据框 .head(),尝试根据值打印排序字典并仅返回顶部指定的结果
- python - 我需要帮助让我的对象四处移动
- opengl - OpenGL 大纹理
- javascript - 将 API 结果传递到图表时遇到问题
- r - 如何查找期初余额和期末余额
- javascript - 无法输入反应输入文本字段 - onChange 无法正常工作
- assembly - 在函数内使用 DB(定义字节)时出现分段错误