PowerShell tạo bảng HTML từ các biến

Một trong những điểm mạnh khiến PowerShell trở thành một trong những ngôn ngữ kịch bản tốt nhất là tính linh hoạt và đơn giản mà nó mang lại khi làm việc với các đối tượng. Tính linh hoạt đó có thể được chứng minh bằng các lệnh ghép ngắn có sẵn để chuyển đổi các đối tượng sang và từ một loại khác. Có rất nhiều chuyển đổi có thể được thực hiện tự nhiên trong PowerShell

tái bút. \> Get-Command Convert*

FunctionNameFunctionConvertFrom-SddlStringCmdletConvertFrom-CIPolicyCmdletConvertFrom-CsvCmdletConvertFrom-JsonCmdletConvertFrom-SecureStringCmdletConvertFrom-StringCmdletConvertFrom-StringDataCmdletConvert-PathCmdletConvert-StringCmdletConvertTo-CsvCmdletConvertTo-HtmlCmdletConvertTo-JsonCmdletConvertTo-SecureStringCmdletConvertTo-TpmOwnerAuthCmdletConvertTo-Xml

Như bạn có thể thấy một trong số chúng được gọi là “ConvertTo-Html” mà chúng tôi sẽ sử dụng để tạo các báo cáo có thể được hiển thị trong trình duyệt web. Bạn có thể tìm thấy trang trợ giúp đầy đủ của lệnh ghép ngắn này trong tài liệu của Microsoft

Giống như bất kỳ lệnh ghép ngắn Chuyển đổi nào khác, nó có thể được sử dụng bằng cách chỉ định đối tượng đầu vào làm đối số hoặc bằng cách dẫn nó vào lệnh chuyển đổi. Thông thường cái sau được sử dụng vì nó dễ dàng và nhanh hơn theo cách đó

Đầu ra của lệnh ghép ngắn “ConvertTo-Html” thuộc loại chuỗi nên nó có thể được lưu trữ trong một tệp

PSD. \> get-tiến trình. Chuyển đổi sang Html. Get-Member
TypeName. Hệ thống. Chuỗi

Tạo báo cáo HTML cơ bản trong PowerShell

Bạn có thể tạo một báo cáo cơ bản về các quy trình đang chạy trên máy của mình trong một tệp có tên là Quy trình. Html bằng lệnh sau

PowerShell tạo bảng HTML từ các biến

tái bút. \> get-tiến trình. Chuyển đổi sang Html. Quy trình xuất tệp. Html

Nếu bạn xem tệp Html, bạn sẽ thấy tất cả các quy trình của mình ở dạng bảng HTML

PowerShell tạo bảng HTML từ các biến

Nếu bạn mở tệp này trong trình duyệt web, bạn sẽ thấy đầu ra giống như khi bạn chạy “Get-Process. Lựa chọn *. format-Table” trong PowerShell (miễn là bạn có màn hình cực rộng)

Như bạn có thể thấy, thông tin ở đây nhưng nói một cách trực quan thì không thú vị lắm. Chúng ta sẽ xem sau về cách làm cho nó trông hấp dẫn hơn

PowerShell tạo bảng HTML từ các biến

Thu hẹp đầu ra

Bạn rất có thể không muốn thu thập mọi thuộc tính của các đối tượng vì chúng không liên quan đến trường hợp sử dụng của bạn. Bạn có thể sử dụng tham số ” -Property” của lệnh ghép ngắn “ConvertTo-Html” thay vì đưa nó vào “Select”. Đầu ra là như nhau và nó không làm cho lệnh chạy nhanh hơn nhưng cá nhân tôi thấy việc sử dụng các tham số do lệnh ghép ngắn cung cấp sẽ dễ dàng hơn và nó rút ngắn lệnh về tổng thể. Lệnh càng ngắn càng sạch

tái bút. \> get-tiến trình. ConvertTo-Html -Tên thuộc tính,cpu,Id,Thời gian bắt đầu. ngoài tập tin. \Quá trình. Html

Khi tập hợp các thuộc tính đã được chỉ định cho lệnh, đầu ra chỉ được thu hẹp thành những thuộc tính đó

PowerShell tạo bảng HTML từ các biến

Thông số tùy chỉnh nội dung

Trước khi bắt đầu tùy chỉnh, tôi cho rằng tốt nhất nên xem lại các tham số được cung cấp bởi lệnh ghép ngắn “ConvertTo-Html”. Các tham số được liệt kê bên dưới là những tham số chính mà bạn sẽ cần để tạo báo cáo tốt

Tham sốDescription-BodyChỉ định văn bản để thêm vào sau thẻ mở. Theo mặc định, không có văn bản ở vị trí đó. -CssUriChỉ định Mã định danh tài nguyên đồng nhất (URI) của biểu định kiểu xếp tầng (CSS) được áp dụng cho tệp HTML. URI được bao gồm trong liên kết biểu định kiểu ở đầu ra. -FragmentChỉ tạo một bảng HTML. Các thẻ HTML, HEAD, TITLE và BODY bị bỏ qua. -HeadXác định nội dung của thẻ HEAD. Mặc định là tiêu đề HTML TABLE. Nếu bạn sử dụng tham số Head, tham số Tiêu đề sẽ bị bỏ qua. -PostContentChỉ định văn bản để thêm vào sau thẻ đóng TABLE. Theo mặc định, không có văn bản ở vị trí đó. -PreContentSpecify văn bản để thêm vào trước thẻ TABLE mở. Theo mặc định, không có văn bản ở vị trí đó. -TitleChỉ định tiêu đề cho tệp HTML, nghĩa là văn bản xuất hiện giữa các thẻ TITLE

tùy chỉnh

Như đã thấy trước đây, bố cục mặc định của bảng Html không phù hợp lắm cho một báo cáo và toàn bộ mọi thứ có vẻ không đạt yêu cầu

Trong chương này, chúng ta sẽ tùy chỉnh báo cáo. Chúng tôi sẽ thực hiện một vài thay đổi cơ bản nhưng nếu bạn muốn tiến xa hơn, trang web w3schools. com sẽ là bạn của bạn vì nó cung cấp tất cả thông tin cần thiết về cú pháp Html và Css

phương pháp tiếp cận

Có 2 cách chính để thực hiện tùy chỉnh tệp Html. Trong cả hai trường hợp, các hướng dẫn tạo kiểu sẽ giống nhau, đó là nơi chúng tôi chỉ định chúng sẽ thay đổi. Cái nào để chọn sẽ phụ thuộc vào trường hợp sử dụng của bạn. Ngoài ra còn có một cách thứ ba được gọi là Kiểu nội tuyến bao gồm đặt kiểu dáng bên trong thẻ của đối tượng để tạo kiểu. Chúng tôi sẽ không mô tả phương pháp này ở đây, nó có thể phù hợp trong một số trường hợp nhưng tôi nghĩ nó không đủ linh hoạt và không sạch sẽ lắm

Lưu ý rằng bạn có thể kết hợp các phương pháp khác nhau nhưng ưu tiên áp dụng. 1 là ưu tiên cao nhất

  1. Kiểu nội tuyến (bên trong phần tử HTML)
  2. Biểu định kiểu bên ngoài và bên trong (trong phần đầu)
  3. trình duyệt mặc định

Biểu định kiểu bên ngoài (Tùy chỉnh được thực hiện trong tệp CSS)

Cho phép tùy chỉnh phức tạp trong khi vẫn giữ Html sạch sẽ

Cấu hình tập trung, được khuyến nghị khi nhiều báo cáo yêu cầu cùng một định dạng

Nếu bạn đang lập kế hoạch tạo nhiều báo cáo hoặc sử dụng nhiều tùy chọn kiểu dáng, bạn nên hợp nhất việc tùy chỉnh tài liệu của mình vào một tệp CSS (Cascading Style Sheets). Điều đó có nghĩa là thay vì định cấu hình kiểu trong từng tệp HTML, bạn chỉ chỉ định một đường dẫn đến tệp CSS sẽ áp dụng kiểu của nó cho báo cáo. Nó cũng mang lại lợi ích là có thể đảm bảo tính nhất quán giữa các báo cáo bằng cách chỉnh sửa một tệp

Để áp dụng biểu định kiểu CSS, chúng ta có thể sử dụng tham số ” -CssUri” của lệnh ghép ngắn “ConvertTo-Html”. Tôi đã đặt một vài quy trình trong biến $Process để rút ngắn lệnh và dễ đọc hơn

tái bút. \> $ process. ConvertTo-Html -CssUri “. \MyStyleSheet. Css”. Out-File. \Quá trình. Html

Bây giờ nếu chúng tôi kiểm tra tệp Html, chúng tôi nhận thấy rằng MyStyleSheet. Tệp css được định cấu hình

PowerShell tạo bảng HTML từ các biến

Ví dụ: chúng tôi đang thêm các đường viền cơ bản vào bảng bằng cách định cấu hình trong tệp Css

PowerShell tạo bảng HTML từ các biến

Bảng bây giờ trông như sau

PowerShell tạo bảng HTML từ các biến

Biểu định kiểu nội bộ (Tùy chỉnh được thực hiện trong tệp HTML)

Tốt cho định dạng cơ bản của một báo cáo

Đơn giản hơn vì nó không yêu cầu tương tác với tệp Css bên ngoài

Trong phần này, chúng tôi không sử dụng tệp Css, nghĩa là chúng tôi chỉ định mã Css trong tệp Html. Tôi thích cách tiếp cận này cho các báo cáo cơ bản yêu cầu một phong cách độc đáo hoặc nếu tôi chỉ có một vài trong số đó. Tôi sẽ không bận tâm đến tệp CSS trừ khi nó mang lại điều gì đó hữu ích cho bảng

Theo phương pháp hay nhất, các kiểu nội bộ được xác định trong phần tử < style >, bên trong phần đầu của trang Html. Để đạt được điều này, chúng tôi sẽ sử dụng tham số ” -Head” của lệnh ghép ngắn “ConvertTo-Html” để bao gồm các kiểu của chúng tôi. Bất cứ thứ gì được truyền vào tham số sẽ được đặt ngay bên dưới thẻ Head. Nói tóm lại, bạn điền vào biến này nội dung của tệp Css. Để chứng minh điều này, chúng tôi sẽ thêm các đường viền vào bảng buồn của chúng tôi như chúng tôi đã làm trước đó

PS D:\> $Style = “< style >table, th, td {border: 1px solid;}< /style >”

tái bút. \> $ process. ConvertTo-Html -Head $Style. Out-File. \Quá trình. Html

Tệp Html hiện bao gồm các kiểu của chúng tôi như hình bên dưới

PowerShell tạo bảng HTML từ các biến

Bảng bây giờ trông giống hệt như trong ví dụ trước

PowerShell tạo bảng HTML từ các biến

Tiêu đề và nội dung bổ sung

Nếu bạn muốn các báo cáo của mình trông chuyên nghiệp nhất có thể, có một số điều chỉnh nhỏ sẽ tạo ra sự khác biệt cho kết quả cuối cùng. Những điều này đặc biệt hữu ích khi có một tập hợp các báo cáo được tạo ra để sắp xếp chúng theo thứ tự.

Tiêu đề

Để thêm tiêu đề, chỉ cần sử dụng đối số ” -Title” của lệnh ghép ngắn “ConvertTo-Html”. Cũng giống như bất kỳ lệnh nào khác, bạn có thể làm việc với các biến để làm cho nó phù hợp

quá trình $. ConvertTo-Html -Title “$env. Các tiến trình của COMPUTERNAME”. Out-File. \Quá trình. Html

Tiêu đề được thêm vào nội dung Html

PowerShell tạo bảng HTML từ các biến

Tiêu đề hiện xuất hiện trong tab trình duyệt

PowerShell tạo bảng HTML từ các biến

thêm nội dung

Cùng với bảng, bạn có thể muốn thêm một số văn bản hoặc nội dung khác vào báo cáo của mình. Một trường hợp sử dụng có thể là một mô tả về những gì được mô tả trong bảng và cách phản ứng theo nó. Nhưng một lần nữa, trí tưởng tượng của bạn là có giới hạn, chẳng hạn, bạn có thể sử dụng nội dung của bảng đã cho để đặt điều kiện nhằm điều chỉnh văn bản cho phù hợp với tình huống

Để thêm nội dung bổ sung vào báo cáo Html, chúng tôi đang sử dụng các tham số ” -PreContent” và ” -PostContent” của lệnh ghép ngắn “ConvertTo-Html”. Trong ví dụ bên dưới, chúng tôi liệt kê các quy trình của Chrome

tái bút. \> $chrom = $ process. nơi tên -eq “chrome”

tái bút. \> $precontent = “Danh sách các tiến trình trên $env. TÊN MÁY TÍNH. ”

tái bút. \> $postcontent= “Có $($chrome. đếm) các tiến trình chrome đang chạy. ”

tái bút. \> $ process. ConvertTo-Html -CssUri. \MyStyleSheet. Css -PostContent $postcontent -PreContent $precontent. Out-File. \Quá trình. Html

PreContent được thêm vào sau thẻ body và PostContent được thêm vào trước thẻ /body

PowerShell tạo bảng HTML từ các biến

Báo cáo hiển thị rõ ràng những thay đổi mới này trong trình duyệt

PowerShell tạo bảng HTML từ các biến

Bây giờ, đây là một ví dụ rất đơn giản nhưng người ta có thể nghĩ ra nhiều cách sử dụng khác nhau cho những. Chẳng hạn, bạn có thể tưởng tượng việc thêm nội dung của tệp nhật ký hoặc nối thêm một bảng khác vào bảng hiện có (thêm về tham số “-Fragment” bên dưới)

Thay đổi màu của hàng đầu tiên

Tôi muốn thêm phần này để trình bày cách thay đổi màu của hàng đầu tiên của bảng. Mặc dù nghe có vẻ phô trương nhưng tôi thấy khá hữu ích khi biết được trạng thái của một báo cáo trong nháy mắt và nó khá dễ thực hiện với một chút Css. Lưu ý rằng nếu bạn sử dụng biểu định kiểu nội bộ (điều mà chúng tôi sắp thực hiện), bạn có thể sử dụng nó trong email

Đối với ví dụ này, chúng tôi đang liệt kê các kho dữ liệu trong PowerCLI. Theo dung lượng trống của kho dữ liệu được sử dụng nhiều nhất, nó sẽ thay đổi hàng trên cùng thành màu xanh lam, vàng hoặc đỏ. Mã PowerShell bên dưới tự giải thích để hiểu cách thức hoạt động của mã này. Như bạn có thể thấy, chúng tôi sử dụng phần kiểu để thay đổi màu của hàng trên cùng tùy theo việc tìm thấy kho dữ liệu có ít hơn 30% (màu đỏ), 40% (màu vàng). Nếu không có kho dữ liệu nào tồn tại trong cả hai, màu sẽ có màu xanh lam. Các ngưỡng này cao đến mức làm cho nó chuyển sang màu đỏ, bạn ổn với 30%

$ vàng = 40

$đỏ = 30

$PreContent = “Ngưỡng dung lượng trống. Vàng 40% ;

$Datastore = Get-Datastore

if ($Datastore. ở đâu { ($_. dung lượng trốnggb / $_. capacitygb * 100) -lt $red }) {$color = “red”}
elseif ($Datastore. ở đâu { ($_. dung lượng trốnggb / $_. capacitygb * 100) -lt $yellow }) {$color = “yellow”}
else {$color = “blue”}

$style = “< style > bảng thứ { nền. $màu; . 1px rắn;

$Html = $Datastore. ConvertTo-Html -Tên thuộc tính,freespacegb,dung lượnggb -Head $style -PreContent $PreContent

$Html. Kho dữ liệu ngoài tệp-Báo cáo. Html

Đây là giao diện khi một kho dữ liệu được tìm thấy với ít hơn 30% dung lượng trống trong trường hợp này. Trong trường hợp này là “Datastore-X3”

PowerShell tạo bảng HTML từ các biến

Tham số "Mảnh ghép"

Tôi quyết định dành cả một chương cho tham số này vì tôi thấy nó rất hữu ích và có thể được sử dụng trong nhiều trường hợp. Mục đích của tham số này là loại trừ các thẻ HTML, HEAD, TITLE và BODY khỏi đầu ra. Điều đó có nghĩa là chỉ có mã Html của bảng sẽ ở đầu ra. Trong phần này, chúng ta sẽ xem xét một số trường hợp sử dụng này và xem chúng ta có thể làm gì với nó

Nhiều bảng trong một báo cáo

Trong ví dụ dưới đây, chúng tôi đang xếp chồng một bảng quy trình và một bảng dịch vụ. Chúng tôi sử dụng tham số ” -PostContent” để nối thêm bảng dịch vụ với thẻ br để chừa khoảng trống ở giữa

tái bút. \> $Service = Nhận dịch vụ. chọn -fi 5. ConvertTo-Html -Trạng thái thuộc tính, tên, tên hiển thị

tái bút. \> $ process. ConvertTo-Html -CssUri. \MyStyleSheet. Css -PostContent (“$Service”). Out-File. \Quá trình. Html

Kết quả trên trình duyệt như sau

PowerShell tạo bảng HTML từ các biến

Sử dụng tệp mẫu Html

Phương pháp này ít rõ ràng hơn một chút nhưng có thể hữu ích nếu bạn muốn đặt bảng bên trong tệp Html mà bạn sử dụng làm mẫu. Thông thường, bạn sẽ có một tệp Html hoàn chỉnh với tất cả các chuông và còi mà bạn cần, ví dụ: có thể có một liên kết quay lại tệp chỉ mục liệt kê tất cả các báo cáo và hình ảnh về mèo. Ưu điểm của phương pháp này là, giống như với tệp Css để tạo kiểu, bạn có thể sửa đổi bố cục của tất cả các báo cáo của mình từ một vị trí duy nhất

Trong tệp “Mẫu” này, bạn đặt một chuỗi ký tự đặc biệt mà sau đó bạn sẽ thay thế bằng bảng được tạo bởi “ConvertTo-Html”. Tham số ” -Fragment” hữu ích ở đây vì Html đã được tạo sẵn và chỉ thiếu bảng

  1. Nhập nội dung của mẫu Html trong biến Powershell
  2. Thay thế chuỗi đặc biệt bằng bảng Html trong biến
  3. Xuất nội dung của biến vào tệp Html của báo cáo. Mới hoặc hiện có với ” -Force”

Hãy gọi tệp mẫu Html là “Report-Template. Html” sẽ trông giống như thế này. Nó sẽ là một mẫu nâng cao hơn trong trường hợp sử dụng thực tế nhưng nó được đơn giản hóa vì lợi ích của đối số. Chuỗi đặc biệt được đề cập trước đó là “REPLACE-ME” trong ví dụ bên dưới

PowerShell tạo bảng HTML từ các biến

Mã PowerShell để tạo báo cáo dựa trên mẫu này sẽ giống như sau. Không cần thêm vì liên kết đến tệp Css đã có trong mẫu. Lưu ý rằng bạn cũng có thể cần sử dụng cùng một phương pháp thay thế cho thẻ tiêu đề vì nó nằm trong thẻ Head, nhưng nó phụ thuộc vào cách bạn xây dựng mẫu

$Template = “. \Mẫu báo cáo. Html”
$ReplaceString = “REPLACE-ME”

$Report = Lấy nội dung $Template

$Table = Get-Process. ConvertTo-Html -Fragment

$Report = $Report -thay thế $ReplaceString,$Table

báo cáo $. Quy trình ngoài tệp. Html

Bài thuyết trình

Bây giờ bạn đã có một báo cáo web đẹp, sẽ không hay nếu để nó ở đâu đó trên máy tính của bạn và mở nó cục bộ. Chà, nó thực sự ổn nhưng chúng ta có thể làm tốt hơn

máy chủ web

Khi bạn đã sẵn sàng sử dụng PowerShell cho mục đích báo cáo thực tế, bạn nên sử dụng một máy chủ chuyên dụng với tác vụ được lên lịch cho mỗi tập lệnh PowerShell. Sau đó, bạn có thể viết các tập lệnh của mình theo cách mà chúng lưu trữ tệp Html trong một thư mục do IIS cung cấp để chúng có sẵn từ mọi nơi. Điều này sẽ cho phép bạn tự động chạy các báo cáo của mình và chuẩn bị sẵn sàng khi bạn đi làm vào buổi sáng

E-mail

Nếu bạn không muốn mở trình duyệt và nhấp vào dấu trang, điều này hoàn toàn có thể hiểu được, bạn có thể muốn nhận báo cáo qua email. Không vấn đề gì với điều đó. Thay vì lưu trữ mã Html do PowerShell tạo trong một tệp, bạn chỉ cần chuyển nó dưới dạng tham số ” -Body” của “Send-MailMessage” và đặt khóa chuyển “ -BodyAsHtml”. như vậy. Lưu ý rằng những gì đã được mô tả trong các chương trước cũng áp dụng ở đây

$Table = Get-Process. Chuyển đổi sang Html

Send-MailMessage -Body $Table -BodyAsHtml -From “$Env. Tên máy tính@tại đây. com” -Tới “xavier@here. com” -SmtpServer “srv-smtp. nơi đây. local” -subject “Processes report”

Lưu ý rằng bạn có thể thêm tệp đính kèm bằng lệnh ghép ngắn này. Điều này có thể hữu ích để đính kèm tệp nhật ký hoặc báo cáo đầy đủ và chỉ hiển thị 10 hàng trên cùng nếu quá dài đối với email

Sự kết luận

Báo cáo và giám sát là hai lĩnh vực của trung tâm dữ liệu có thể tạo ra sự khác biệt thực sự trong thời gian phản hồi của bạn đối với một sự kiện, từ phản ứng đến chủ động. Khả năng tạo báo cáo html trong PowerShell sẽ mở ra một thế giới khả năng về những vấn đề này

Có quá nhiều điều để nói về chủ đề này mà tôi có thể nói về nó hàng giờ. Nếu bạn quan tâm đến các báo cáo nâng cao hơn với bộ lọc, sắp xếp và tất cả các loại tính năng khác, tôi khuyên bạn nên kiểm tra plugin Tablesorter cho JQuery

Giờ đây, bạn có thể tạo các trường hợp sử dụng của riêng mình và bắt đầu tăng cường báo cáo trong môi trường của mình

Bạn có thể viết mã HTML trong PowerShell không?

Như bạn có thể thấy trong ảnh chụp màn hình bên dưới, PowerShell tạo tất cả các phần tử HTML cơ bản khi đầu ra được dẫn đến lệnh ghép ngắn ConvertTo-Html . Khi bạn sử dụng tham số Fragment, PowerShell chỉ tạo phần tử bảng HTML. Các phần tử

Có thể được sử dụng để chuyển đổi đầu ra sang HTML và hiển thị tệp HTML không?

Lệnh ghép ngắn ConvertTo-Html có tham số Head cho phép bạn chỉ định mã HTML sẽ đi vào phần tử HEAD

Cách nào sau đây là cách chính xác để xuất dữ liệu PowerShell sang báo cáo HTML?

Để tạo báo cáo HTML bằng PowerShell, chúng ta có thể sử dụng lệnh ConvertTo-HTML . Ví dụ: giả sử chúng ta cần báo cáo các dịch vụ ở định dạng HTML, sau đó chúng ta có thể sử dụng ConvertTo-HTML làm đường dẫn.