Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell ConvertTo HTML参数工作不正常_Powershell - Fatal编程技术网

Powershell ConvertTo HTML参数工作不正常

Powershell ConvertTo HTML参数工作不正常,powershell,Powershell,我正在尝试使用以下CMD命令编写PowerShell文件脚本以分析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

我正在尝试使用以下CMD命令编写PowerShell文件脚本以分析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代码:

通过直接将输出重定向到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'
有关更多信息,请参阅

您还可以构建自己的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'

转换为Html工作得很好。它根本没有达到你的期望。cmdlet将输入对象转换为表,其中对象属性成为表列。字符串对象只有一个属性:Length,因此您的写入输出值将成为输出中相应字符串长度的数字。格式列表生成格式化对象。仅使用Format-*cmdlet直接向用户显示数据。在所有其他情况下,请改用“选择对象”。如果cmdlet输出包含嵌套对象,您需要自己展开这些对象。感谢@AnsgarWiechers的解释,您建议如何为脚本获得最佳显示?脚本将有+50个以上的命令,因此它应该看起来清晰有序。您希望我推荐什么?“我不知道你要提供什么数据,给谁。”安斯加维切尔查看帖子。。我编辑了它
$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'