2017-04-07 72 views
0

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

#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 
+0

可排序?你的意思是你希望有人能够与你生成的HTML进行交互,并在其中一列上对表格进行排序? – Matt

+0

嗨马特,是的,我希望它能够点击列标题来对该列中的内容进行排序。 –

+0

好的。你的意思是没有Java或Java * Script *吗?答案也必须是HTML。我的意思是你可以使用'Out-GridView',它可以为你做这些事情。模拟,如果这将被不使用PowerShell的人阅读。你不能只是做一些像[这从w3schools](https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_sort_table_desc)....是的,我知道它的JavaScript?我不知道你有什么排除。 – Matt

回答

0

是否有可能与下面的脚本,并且不需要使用JavaScript创建HTML排序表?

不,这是不可能的,因为这个限制或至少没有与当前的HTML。你可能能够在页面中使用vbscript做些事情,但如果这对你来说也是有限的,我也不会感到惊讶。

我能想到你已经制定了范围内做的唯一一件事就是推出单独的报告,相同的HTML文件中,即显示首选排序选项,而不一定所有排序选项。

你可以做或做的其他事情是创建一个CSV文件。这样您的收件人可以将数据读入程序或甚至像NotePad ++这样的文本编辑器,并让它为您进行排序。我明白,如果这不在你的任务范围内,但它仍然是一个有效的选项。

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

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