【问题标题】:Why does PowerShell treat my HTML containing a # as a comment?为什么 PowerShell 将包含 # 的 HTML 视为注释?
【发布时间】:2020-07-01 03:28:02
【问题描述】:

我正在尝试创建 HMTL 格式的电子邮件,其中一些消息是红色的。我是这样做的:

[void]$mailBody.add("<p style="color:#FF0000";>Error Adding User ($Username) to Group ($group) </p> `r`n")

但 HTML 中的 # 正在注释掉该行的其余部分。

有什么办法可以避免吗?

【问题讨论】:

  • 您需要使用反引号转义字符串的内引号

标签: html powershell


【解决方案1】:

您在带引号的字符串中使用了相同的引号。那是行不通的。 PowerShell 会将其解析为"&lt;p style=",后跟注释。使用不同的内引号:

[void]$mailBody.add("<p style='color:#FF0000';>Error Adding User ($Username) to Group ($group) </p> `r`n")

或转义你的内在引号:

[void]$mailBody.add("<p style=`"color:#FF0000`";>Error Adding User ($Username) to Group ($group) </p> `r`n")

【讨论】:

    【解决方案2】:

    这不是什么稀奇事as this example shows...

    $Style = "<style>"
    $Style = $Style + "BODY{background-color:#D7D8D8;}"
    $Style = $Style + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
    $Style = $Style + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;}"
    $Style = $Style + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;}"
    $Style = $Style + "</style>"
    $ServerList = Get-Content -path B:\MYSHARE\PowershellScripts\computers.txt
    $serviceList =  &{$args} IISADMIN W3SVC HTTPFilter cpsvc CitrixWMIService CtxHttp CitrixXTEServer IMAService CdmService "Citrix SMA Service"
    
    $body = $ServerList | foreach { (Get-Service -Name $serviceList -computername $_) | 
            Select-Object MachineName, Name, DisplayName, Status | ConvertTo-HTML -Fragment}
    
    <# possible values
    [enum]::GetValues([System.ServiceProcess.ServiceControllerStatus])
    Stopped
    StartPending
    StopPending
    Running
    ContinuePending
    PausePending
    Paused
    
    the field tag looks like this <td>Running</td> we need it to look like this 
    <td bgcolor="#00ff00">Running</td>
    
    #>
    $colorTagTable = @{Stopped = ' bgcolor="#ff0000">Stopped<';
                       Running = ' bgcolor="#00ff00">Running<'}
    
    #get possible values look them in text sorrounded by > < and replace them with style (pun intended).
    $colorTagTable.Keys | foreach { $body = $body -replace ">$_<",($colorTagTable.$_) }
    
    ConvertTo-HTML -head $Style -body "<H2>Validation Completed</H2> $body" | 
    Out-File "B:\MYSHARE\PowershellScripts\Validated.htm"
    

    所以,这可以看作是这个 SO 接受的答案的副本...

    Setting HTML font color in Powershell email

    ...使用稍微不同的方法,但也指向上述资源。

    您可以在general search for your use case 中找到更多示例。

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2014-11-12
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      相关资源
      最近更新 更多