【问题标题】:Sortable HTML table with Powershell带有 Powershell 的可排序 HTML 表格
【发布时间】:2017-09-02 21:58:51
【问题描述】:

下面的脚本是否可以在不使用 JavaScript 的情况下创建可排序的 HTML 表格?到目前为止,我发现的所有示例都需要使用 JavaScript。如果可能的话,我希望它完全在 PowerShell 中完成。

#Set variables
$image = "C:\Scriptrepository\NHSI(left).gif"
$ConvertImage = [Convert]::ToBase64String((Get-Content $image -Encoding Byte))
$ImageHTML = "<img src=data:image/gif;base64,$($ConvertImage) alt=NHSI/>"
$CurrentDate = Get-Date -Format F

#Function for alternating table colour rows
Function Global:Set-AlternatingRows {
                [CmdletBinding()]
                Param(
                [Parameter(Mandatory,ValueFromPipeline)]
                [string]$Line,

                [Parameter(Mandatory)]
                [string]$CSSEvenClass,

                [Parameter(Mandatory)]
                [string]$CSSOddClass
                )
    Begin {
                $ClassName = $CSSEvenClass
        }
    Process {
                If ($Line.Contains("<tr><td>"))
                {   $Line = $Line.Replace("<tr>","<tr class=""$ClassName"">")
                If ($ClassName -eq $CSSEvenClass)
                {   $ClassName = $CSSOddClass
}
                Else
                {   $ClassName = $CSSEvenClass
            }
        }
    Return $Line
    }
}    

#Function to validate request and create variable from input
Function Global:GetADGroupMembersrecursively {
    Write-Host "Enter Distribution List / AD Group name:" -ForegroundColor Green
    $Global:ADGroupName = Read-Host
    if ([string]::IsNullOrEmpty($ADGroupName))
    { 
    CLS
    Write-Host -ForegroundColor red "Cannot be blank, please re-enter AD Group / distribution list name" | Out-Null
    GetADGroupMembersRecursively 
    }
    $Global:DLCheck = DSQuery group -Name "$ADGroupName"
    if ($DLCheck -eq $null) 
    { 
    CLS
    Write-Host -foregroundcolor red "Did not find AD Group / Distribution List, please verify this is the correct name" | Out-Null
    GetADGroupMembersRecursively
  }
}

GetADGroupMembersRecursively

$Head = @"
<style>
BODY {font-family: Arial; font-size: 8pt; color: #000000; background-color: #ffffff;}
TABLE{margin: auto; font-family: Segoe UI; box-shadow: 10px 10px 5px #4C607B; width: 100%;height :50px;}
TH, TD {border: 1px solid #ffffff; border-collapse: collapse;padding: 3px;}
TH {font-size: 1.2em; background-color: #003366; color: #ffffff; }
TD {color: #000000; }
 .even { background-color: #efefef; }
 .odd { background-color: #c0c0c0; }
TR { background: #b8d1f3; }"
H4 {font-family: Arial; font-size: 12pt; color: #4C607B;align=right;}
H5 {font-family: Arial; font-size: 8pt; color: #4C607B;align=right;}
</style>
"@ 

#Table creation
$Post = "<br><br> Members of $ADGroupName <br> Generated on $CurrentDate"
Get-ADGroupMember -Identity $ADGroupName -Recursive | Get-ADUser -pr GivenName,Surname,mail,sAMAccountName | Select-Object @{Name = "First Name"; Expression = {$_.GivenName}}, @{Name = "Last Name"; Expression = {$_.Surname}}, @{Name = "Email Address"; Expression = {$_.mail}}, @{Name = "User Account"; Expression = {$_.sAMAccountName}} | sort Surname | 
ConvertTo-HTML -head $head -body $ImageHTML -PostContent $Post -As Table | Set-AlternatingRows -CSSOddClass odd -CSSEvenClass even | Out-File C:\ScriptRepository\Results\$ADGroupName.htm
Invoke-Item C:\ScriptRepository\Results\$ADGroupName.htm

【问题讨论】:

  • 可排序?您的意思是您希望某人能够与您生成的 HTML 交互并在其中一列上对表格进行排序?
  • 嗨,马特,是的,我希望他们能够单击列标题以按该列对内容进行排序。
  • 要说它不能通过这个限制来完成,因为我不知道任何允许这样做的 CSS/HTML 魔法。为什么你不能使用javascript? stackoverflow.com/questions/948578/… 建议 jquery 仍然依赖于 javascript
  • 据我所知,没有办法在纯 HTML 中做到这一点。如果您想要动态内容,那么您可能需要使用比 HTML 更动态的内容。
  • 你可以使用一个菜单,有多个 html 页面(都是静态的),例如,每个页面都有不同的排序?

标签: html powershell


【解决方案1】:

下面的脚本是否可以在不使用 JavaScript 的情况下创建可排序的 HTML 表格?

没有。这在该限制下是不可能的,或者至少在当前的 HTML 中是不可能的。您可能可以在页面中使用 vbscript 执行某些操作,但如果这对您来说也不受限制,我不会感到惊讶。

在您规定的范围内,我唯一能想到的就是在同一个 html 文件中推出单独的报告,显示 首选 排序选项,而不一定 所有排序选项。

您可以做或结合做的其他事情是创建一个 CSV 文件。这样,您的收件人可以将数据读入程序甚至 NotePad++ 之类的文本编辑器,并让它为您进行排序。我了解这是否不在您的任务范围内,但总的来说它仍然是一个有效的选择。

如果可能的话,我希望它完全在 PowerShell 中完成。

另一个可能“存在”的选项是,您可以使用 Out-GridView 之类的东西来代替 HTML 输出。这将为您的数据提供一个交互式界面。如果用户是运行脚本的人,那么他们可以使用此选项。

【讨论】:

    猜你喜欢
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2011-01-08
    • 2021-12-22
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多