Tìm hiểu cách sử dụng ConvertTo-HTML đúng cách để tạo các báo cáo HTML có định dạng tốt, nhiều phần – nhưng sau đó hãy tiến xa hơn với mô-đun EnhancedHTML tùy chỉnh. Tạo các báo cáo đẹp, được mã hóa bằng màu sắc, năng động, nhiều phần một cách dễ dàng và nhanh chóng. Bởi Don Jones
Hướng dẫn này được phát hành theo Creative Commons Attribution-NoDerivs 3. 0 Giấy phép chưa chuyển đổi. Các tác giả khuyến khích bạn phân phối lại tệp này rộng rãi nhất có thể, nhưng yêu cầu bạn không sửa đổi tài liệu
Lấy mã Bạn có thể tìm thấy mô-đun EnhancedHTML2 được đề cập trong cuốn sách này tại https. //www. thư viện quyền lực. com/gói/Nâng caoHTML2/. Trang đó bao gồm các hướng dẫn tải xuống. Cần có PowerShellGet và có thể lấy từ PowerShellGallery. com
Cuốn sách này có hữu ích không?
Kiểm tra cập nhật. Sách điện tử của chúng tôi thường được cập nhật với nội dung mới và sửa chữa. Chúng tôi cung cấp chúng theo ba cách
GitBook và LeanPub có đầu ra định dạng PDF hơi khác nhau, vì vậy bạn có thể chọn định dạng bạn thích. LeanPub cũng có thể thông báo cho bạn khi chúng tôi đẩy mạnh các bản cập nhật. Kho lưu trữ GitHub chính của chúng tôi là có thẩm quyền; . GitBook thường sẽ chứa phiên bản mới nhất của chúng tôi, bao gồm cả những phần chưa hoàn thành;
Khái niệm cơ bản về báo cáo HTML
Trước tiên, hãy hiểu rằng PowerShell không bị giới hạn trong việc tạo báo cáo trong HTML. Nhưng tôi thích HTML vì nó linh hoạt, có thể dễ dàng gửi qua e-mail và có thể dễ dàng làm cho trông đẹp mắt hơn so với một báo cáo văn bản thuần túy. Nhưng trước khi đi sâu vào, bạn cần biết một chút về cách thức hoạt động của HTML
Một trang HTML chỉ là một tệp văn bản thuần túy, trông giống như thế này
1
2
l1/DTD/xhtml1-strict.dtd">
3
4
5
HTML TABLE
title
>
6
head
>
7
8
colgroup
>
9
ComputerName
th
>
Drive
th
>
Free[GB]
th
>
Free[%]
th
>
Size[GB]\10
th
>
tr
>
11
CLIENT
td
>
C:
td
>
49
td
>
82
td
>
60
td
>
tr
>
12
table
>
13
body
>
html
>
11
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
21
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
1
PROCESS {2
3
$style = @"4
body {5
color:#333333;6
font-family:Calibri,Tahoma;7
font-size: 10pt;8
}9
10
h1 {11
text-align:center;12
}13
14
h2 {15
border-top:1px solid #666666;16
}17
18
th {19
font-weight:bold;20
color:#eeeeee;21
background-color:#333333;22
cursor:pointer;23
}24
25
.odd { background-color:#ffffff; }26
27
.even { background-color:#dddddd; }28
29
.paginate_enabled_next, .paginate_enabled_previous {30
cursor:pointer;31
border:1px solid #222222;32
background-color:#dddddd;33
padding:2px;34
margin:4px;35
border-radius:2px;36
}37
38
.paginate_disabled_previous, .paginate_disabled_next {39
color:#666666;40
cursor:pointer;41
background-color:#dddddd;42
padding:2px;43
margin:4px;44
border-radius:2px;45
}46
47
.dataTables_info { margin-bottom:4px; }48
49
.sectionheader { cursor:pointer; }50
51
.sectionheader:hover { color:red; }52
53
.grid { width:100% }54
55
.red {56
color:red;57
font-weight:bold;58
}59
"@
Đó được gọi là Cascading Style Sheet hoặc CSS. Có một vài điều thú vị để rút ra từ điều này
Tôi đã nhét các thuộc tính kiểu dáng vào một chuỗi ở đây và lưu trữ nó trong biến $style. Điều đó sẽ giúp bạn dễ dàng tham khảo điều này sau này
Lưu ý rằng tôi đã xác định kiểu dáng cho một số thẻ HTML, chẳng hạn như H1, H2, BODY và TH. Các định nghĩa kiểu đó liệt kê tên thẻ mà không có dấu chấm trước hoặc dấu thăng. Bên trong dấu ngoặc nhọn, bạn xác định các thành phần kiểu dáng mà bạn quan tâm, chẳng hạn như kích thước phông chữ, căn chỉnh văn bản, v.v. Các thẻ như H1 và H2 đã có các kiểu được xác định trước do trình duyệt của bạn đặt, chẳng hạn như kích thước phông chữ của chúng;
Phong cách cũng kế thừa. Toàn bộ nội dung của trang HTML được chứa trong các thẻ, do đó, bất cứ điều gì bạn gán cho thẻ BODY trong CSS cũng sẽ áp dụng cho mọi thứ trong trang. Cơ thể của tôi thiết lập một họ phông chữ và một màu phông chữ;
Bạn cũng sẽ thấy các định nghĩa về phong cách đứng trước dấu chấm. Đó được gọi là phong cách lớp học, và tôi đã tạo ra chúng từ không khí mỏng. Đây là những mẫu kiểu có thể tái sử dụng có thể được áp dụng cho bất kỳ thành phần nào trong trang. Các ". phân trang” thực sự được sử dụng bởi JavaScript mà tôi sử dụng để tạo các bảng động;
Chú ý đến. số lẻ,. thậm chí, và. màu đỏ trong CSS. Tôi hoàn toàn bịa ra những thứ đó và bạn sẽ thấy tôi sử dụng chúng sau một chút
01
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Sáu hàm trước không làm gì khác ngoài truy xuất dữ liệu từ một máy tính [lưu ý rằng tham số -ComputerName của chúng được xác định là
3, chấp nhận một giá trị, thay vì1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
4 sẽ chấp nhận nhiều giá trị]. Nếu bạn không thể tìm ra cách thức hoạt động của những thứ này… có lẽ bạn cần lùi lại một chút1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
Đối với mục đích định dạng trong cuốn sách này, bạn sẽ thấy tôi sử dụng ký tự đánh dấu phía sau [chẳng hạn như sau
5]. Điều đó thoát khỏi việc xuống dòng ngay sau nó, biến nó thành một loại ký tự tiếp tục dòng. Tôi chỉ ra nó bởi vì nó rất dễ bỏ lỡ, là một nhân vật nhỏ bé như vậy1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
11
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Phần trên bắt đầu phần chính của tập lệnh demo của tôi. Nó lấy bất kỳ tên máy tính nào được chuyển đến tham số
6 của tập lệnh và duyệt qua từng tên một. Nó đang thực hiện cuộc gọi tới1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
7 như một cuộc thử nghiệm - nếu điều này không thành công, tôi không muốn làm bất cứ điều gì với tên máy tính hiện tại. Phần còn lại của tập lệnh chỉ chạy nếu cuộc gọi WMI đó thành công1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
21
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Hãy nhớ rằng tham số khác của tập lệnh này là
8. Tôi đang sử dụng1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
9 để kết hợp1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
40 với tên tệp.1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
9 đảm bảo đúng số dấu gạch chéo ngược, để nếu1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
8 là “C. ” hoặc “C. \” Tôi sẽ nhận được đường dẫn tệp hợp lệ. Tên tệp sẽ là tên máy tính hiện tại, theo sau là. phần mở rộng tên tệp html1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
31
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Đây là lần đầu tiên tôi sử dụng mô-đun EnhancedHTML2. Đoạn ConvertTo-EnhancedHTMLFragment. Chú ý những gì tôi đang làm
- Tôi đang sử dụng bảng băm để xác định tham số lệnh, bao gồm cả -As List và -PreContent ‘
43’ làm tham số và giá trị của chúng. Điều này chỉ định đầu ra kiểu danh sách [so với. một bảng], trước tiêu đề “OS” theo kiểu H2. Xem lại CSS và bạn sẽ thấy tôi đã áp dụng đường viền trên cùng cho tất cả1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}phần tử, sẽ giúp phân tách trực quan các phần báo cáo của tôi
- Tôi đang chạy lệnh Get-InfoOS của mình, chuyển vào tên máy tính hiện tại. Đầu ra đang được chuyển đến…
- ConvertTo-EnhancedHTMLFragment, đang được cung cấp bảng tham số băm của tôi. Kết quả sẽ là một chuỗi HTML lớn, sẽ được lưu trữ trong $html_os
41
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Đó là một ví dụ rất giống, cho phần thứ hai của báo cáo của tôi
51
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
OK, đó là một ví dụ phức tạp hơn. Hãy xem các tham số tôi đang cung cấp cho ConvertTo-EnhancedHTMLFragment
- Vì đang được cung cấp Bảng thay vì Danh sách, do đó, đầu ra này sẽ ở dạng bố cục bảng dạng cột [rất giống với Bảng định dạng sẽ tạo ra, chỉ trong HTML]
- Đối với tiêu đề phần của tôi, tôi đã thêm biểu tượng kim cương bằng cách sử dụng thực thể HTML ♦. tôi nghĩ nó trông khá. Đó là tất cả
- Vì đây sẽ là một bảng, tôi phải chỉ định -EvenRowCssClass và -OddRowCssClass. Tôi đang cung cấp cho họ các giá trị “chẵn” và “lẻ”, là hai lớp [. thậm chí và. lẻ] tôi đã xác định trong CSS của mình. Hãy xem, điều này đang tạo liên kết giữa các hàng trong bảng đó và CSS của tôi. Bất kỳ hàng nào trong bảng được “gắn thẻ” với lớp “lẻ” sẽ kế thừa định dạng của “. lẻ” từ CSS của tôi. Bạn không bao gồm dấu chấm khi chỉ định tên lớp với các tham số này;
44 đang được đặt thành $True, sẽ áp dụng JavaScript cần thiết để biến bảng này thành một bảng được phân trang, có thể sắp xếp. Điều này sẽ yêu cầu HTML cuối cùng để liên kết với tệp JavaScript cần thiết mà tôi sẽ trình bày khi chúng tôi đến đó1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
45 là tùy chọn, nhưng tôi đang sử dụng nó để gán lớp “lưới. ” Một lần nữa, nếu bạn xem lại CSS, bạn sẽ thấy rằng tôi đã định nghĩa một kiểu cho “. lưới,” vì vậy bảng này sẽ kế thừa các hướng dẫn kiểu đó1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}- Cuối cùng là tham số
46. Điều này hoạt động rất giống với các tham số1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
46 của1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
48 và1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
49. Tham số chấp nhận danh sách thuộc tính được phân tách bằng dấu phẩy. Phần đầu tiên, Drive, đã được sản xuất bởi1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
70. Ba người tiếp theo là đặc biệt. chúng là các bảng băm, tạo các cột tùy chỉnh giống như Bảng định dạng sẽ làm. Trong hashtable, bạn có thể sử dụng các phím sau1
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}- n [hoặc tên, hoặc l hoặc nhãn] chỉ định tiêu đề cột - Tôi đang sử dụng “Kích thước[GB],” “Miễn phí[GB]” và “Miễn phí[%]” làm tiêu đề cột
- e [hoặc biểu thức] là một khối tập lệnh, xác định nội dung ô của bảng sẽ chứa. Trong đó, bạn có thể sử dụng $_ để chỉ đối tượng được dẫn vào. Trong ví dụ này, đối tượng đường dẫn đến từ Get-InfoDisk, vì vậy tôi đang đề cập đến các thuộc tính Kích thước, Miễn phí và FreePct của đối tượng
- css [hoặc cssClass] cũng là một khối tập lệnh. Mặc dù các phím còn lại hoạt động giống như chúng làm với Select-Object hoặc Format-Table, nhưng css [hoặc cssClass] là duy nhất đối với ConvertTo-EnhancedHTMLFragment. Nó chấp nhận một khối tập lệnh, dự kiến sẽ tạo ra một chuỗi hoặc không có gì cả. Trong trường hợp này, tôi đang kiểm tra xem liệu thuộc tính FreePct của đối tượng piped-in có nhỏ hơn 80 hay không. Nếu có, tôi xuất chuỗi “màu đỏ. ” Chuỗi đó sẽ được thêm vào như một lớp CSS của ô trong bảng. Hãy nhớ rằng, trong CSS của tôi, tôi đã định nghĩa lớp “. đỏ” và đây là nơi tôi gắn lớp đó vào các ô của bảng
- Xin lưu ý, tôi nhận ra rằng thật ngớ ngẩn khi tô màu đỏ khi phần trăm ổ đĩa trống dưới 80%. Nó chỉ là một ví dụ tốt để chơi với. Bạn có thể dễ dàng có một công thức phức tạp hơn, như _if [$_. FreePct -lt 20] { ‘đỏ’ } elseif [$_. FreePct -lt 40] { 'vàng' } khác { 'xanh' } _ - giả sử bạn đã xác định các lớp “. đỏ và ". màu vàng” và “. màu xanh lá cây” trong CSS của bạn
61
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Nhiều điều tương tự trong hai ví dụ trên, chỉ với một tham số mới. -MakeHiddenSection. Điều này sẽ làm cho phần đó của báo cáo bị thu gọn theo mặc định, chỉ hiển thị chuỗi -PreContent. Nhấp vào chuỗi sẽ mở rộng và thu gọn phần báo cáo
Lưu ý quay lại CSS của tôi rằng, đối với lớp. sectionHeader, tôi đặt con trỏ thành biểu tượng con trỏ và làm cho văn bản của phần có màu đỏ khi di chuột qua nó. Điều đó giúp gợi ý cho người dùng rằng có thể nhấp vào tiêu đề phần. Mô-đun EnhancedHTML2 luôn thêm lớp CSS “tiêu đề mục” vào -PreContent, do đó, bằng cách xác định “. tiêu đề mục” trong CSS của mình, bạn có thể tạo kiểu thêm cho tiêu đề mục
71
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Không có gì mới trong đoạn trích trên, nhưng bây giờ chúng tôi đã sẵn sàng để lắp ráp HTML cuối cùng
81
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Cả mã không ghi chú và mã nhận xét đều làm điều tương tự. Cái đầu tiên, không ghi chú, đặt đường dẫn tệp cục bộ cho hai tệp JavaScript bắt buộc. Người nhận xét không chỉ định các tham số đó, do đó, HTML cuối cùng mặc định lấy JavaScript từ Mạng phân phối nội dung dựa trên web [CDN] của Microsoft. Trong cả hai trường hợp
- -CssStyleSheet chỉ định CSS của tôi - Tôi đang cung cấp cho nó biến $style được xác định trước. Bạn cũng có thể liên kết đến một biểu định kiểu bên ngoài [có một tham số khác, -CssUri, dành cho điều đó], nhưng việc có kiểu được nhúng trong HTML làm cho nó khép kín hơn
- -Tiêu đề chỉ định những gì sẽ được hiển thị trong thanh tiêu đề hoặc tab của trình duyệt
- -PreContent, mà tôi đang xác định bằng cách sử dụng các thẻ HTML, sẽ xuất hiện ở phần trên cùng của báo cáo. Ngoài ra còn có -PostContent nếu bạn muốn thêm chân trang
- -HTMLFragments muốn có một mảng [do đó tôi sử dụng @[] để tạo một mảng] các đoạn HTML do ConvertTo-EnhancedHTMLFragment tạo ra. Tôi đang cung cấp cho nó 6 phần báo cáo HTML mà tôi đã tạo trước đó
Kết quả cuối cùng được đưa ra đường dẫn tệp tôi đã tạo trước đó. Kết quả
Tôi có hai phần bị sập cuối cùng. Lưu ý rằng danh sách quy trình được phân trang, với các nút Trước/Tiếp theo và lưu ý rằng đĩa trống 80% của tôi được đánh dấu màu đỏ. Các bảng hiển thị 10 mục theo mặc định, nhưng có thể được làm lớn hơn và chúng cung cấp hộp tìm kiếm tích hợp. Tiêu đề cột có thể nhấp được cho mục đích sắp xếp
Thành thật mà nói, tôi nghĩ nó khá tuyệt vời
Kết hợp Báo cáo HTML và Ứng dụng GUI
Tôi đã có một số người đặt câu hỏi trong các diễn đàn tại PowerShell. org, với chủ đề "làm cách nào tôi có thể sử dụng RichTextBox trong ứng dụng GUI của Windows để hiển thị dữ liệu được định dạng đẹp mắt?" . Sử dụng HTML thay thế. Ví dụ: giả sử bạn đã làm theo các ví dụ trong chương trước và tạo ra một báo cáo HTML đẹp mắt. Hãy nhớ rằng báo cáo sẽ nằm “trong bộ nhớ”, không phải trong tệp văn bản, cho đến khi kết thúc
91
Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html2
Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append3
Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
Để minh họa, giả sử nó hiện nằm trong một tệp có tên C. Báo cáo. html. Tôi sẽ sử dụng PowerShell Studio 2012 của SAPIEN để hiển thị báo cáo đó trong GUI, thay vì bật nó lên trong trình duyệt Web. Ở đây, tôi đã bắt đầu một dự án dạng đơn, đơn giản. Tôi đã thay đổi văn bản của biểu mẫu thành “Báo cáo” và tôi đã thêm một điều khiển WebBrowser từ hộp công cụ. Điều khiển đó tự động điền vào toàn bộ biểu mẫu, điều này thật hoàn hảo. Tôi đặt tên cho điều khiển WebBrowser là “web”, giúp nó có thể truy cập được từ mã thông qua biến $web
Tôi sẽ lưu ý rằng PowerShell Studio 2012 đã lỗi thời vào thời điểm này, nhưng bạn vẫn nên nắm được ý tưởng chung
Tôi hy vọng bạn sẽ tạo một biểu mẫu như phần này của một dự án tổng thể lớn hơn, nhưng tôi chỉ tập trung vào cách thực hiện điều này một chút. Vì vậy, tôi sẽ tải báo cáo vào điều khiển WebBrowser khi biểu mẫu này tải
01
function Get-InfoOS {2
[CmdletBinding[]]3
param[4
[Parameter[Mandatory=$True]][string]$ComputerName5
]6
$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName7
$props = @{'OSVersion'=$os.version;8
'SPVersion'=$os.servicepackmajorversion;9
'OSBuild'=$os.buildnumber}10
New-Object -TypeName PSObject -Property $props11
}
Bây giờ tôi có thể chạy dự án
Tôi nhận được một hộp thoại bật lên đẹp mắt hiển thị báo cáo HTML. Tôi có thể thay đổi kích thước, thu nhỏ, phóng to và đóng bằng các nút tiêu chuẩn trên thanh tiêu đề của cửa sổ. Dễ dàng và chỉ mất 5 phút để tạo
Nếu bạn đang gặp sự cố, muốn làm điều gì đó và không thể tìm ra cách thực hiện, tìm thấy lỗi và muốn đưa ra cách khắc phục hoặc chỉ cần có phản hồi về hướng dẫn này hoặc mô-đun EnhancedHTML, thì tôi rất mong nhận được phản hồi từ bạn
Cách đơn giản nhất là đăng lên diễn đàn “Hỏi Đáp Chung” trên http. // powershell. tổ chức/diễn đàn/. Tôi theo dõi khá kỹ điều đó và tôi sẽ trả lời ngay khi có thể
Thỉnh thoảng hãy kiểm tra lại để đảm bảo rằng bạn đã có phiên bản mới nhất của hướng dẫn này và mã của nó