下面的脚本是否可以在不使用JavaScript的情况下创建一个可排序的HTML表?到目前为止,我找到的所有示例都需要使用 JavaScript。如果可能的话,我希望它纯粹在PowerShell中完成。
#Set variables
$image = "C:ScriptrepositoryNHSI(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:ScriptRepositoryResults$ADGroupName.htm
Invoke-Item C:ScriptRepositoryResults$ADGroupName.htm
下面的脚本是否可以在不使用 JavaScript 的情况下创建一个可排序的 HTML 表?
不。这在这种限制下是不可能的,或者至少在当前的 HTML 中是不可能的。您也许可以在页面中使用vbscript做一些事情,但如果这对您来说也是禁区,我不会感到惊讶。
在您列出的范围内,我唯一能想到的就是在同一个 html 文件中推出单独的报告,这些报告显示首选排序选项,不一定是所有排序选项。
您可以执行或结合使用的其他操作是创建 CSV 文件。这样,您的收件人可以将数据读入程序甚至像NotePad++这样的文本编辑器中,并让它为您进行排序。我理解这是否不在您的任务范围内,但总的来说它仍然是一个有效的选择。
如果可能的话,我希望它纯粹在PowerShell中完成。
另一个可能"在那里"的选项是,您可以使用类似Out-GridView
的东西代替 HTML 输出。这将为您的数据提供一个交互式界面。如果用户是运行脚本的用户,则此选项可供他们使用。