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

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 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <title>HTML TABLEtitle>
 6 head><body>
 7 <table>
 8 <colgroup><col/><col/><col/><col/><col/>colgroup>
 9 <tr><th>ComputerNameth><th>Driveth><th>Free(GB)th><th>Free(%)th><th>Size(GB)\
10 th>tr>
11 <tr><td>CLIENTtd><td>C:td><td>49td><td>82td><td>60td>tr>
12 table>
13 body>html>

 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
1
 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
2

 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

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
0

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à

 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
3, chấp nhận một giá trị, thay vì
 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
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út

Đố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

 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
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ậy

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
1

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ố

 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
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ới
 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
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ông

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
2

Hãy nhớ rằng tham số khác của tập lệnh này là

 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
8. Tôi đang sử dụng
 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
9 để kết hợp
 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
40 với tên tệp.
 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
9 đảm bảo đúng số dấu gạch chéo ngược, để nếu
 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
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 html

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
3

Đâ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

  1. 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 ‘
     1 function Get-InfoOS {
     2     [CmdletBinding()]
     3     param(
     4         [Parameter(Mandatory=$True)][string]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    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ả

    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

  2. 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…
  3. 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

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
4

Đó là một ví dụ rất giống, cho phần thứ hai của báo cáo của tôi

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
5

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;
  •  1 function Get-InfoOS {
     2     [CmdletBinding()]
     3     param(
     4         [Parameter(Mandatory=$True)][string]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    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]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    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 đó
  • Cuối cùng là tham số
     1 function Get-InfoOS {
     2     [CmdletBinding()]
     3     param(
     4         [Parameter(Mandatory=$True)][string]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    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]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    46 của
     1 function Get-InfoOS {
     2     [CmdletBinding()]
     3     param(
     4         [Parameter(Mandatory=$True)][string]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    48 và
     1 function Get-InfoOS {
     2     [CmdletBinding()]
     3     param(
     4         [Parameter(Mandatory=$True)][string]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    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ởi
     1 function Get-InfoOS {
     2     [CmdletBinding()]
     3     param(
     4         [Parameter(Mandatory=$True)][string]$ComputerName
     5     )
     6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
     7     $props = @{'OSVersion'=$os.version;
     8                'SPVersion'=$os.servicepackmajorversion;
     9                'OSBuild'=$os.buildnumber}
    10     New-Object -TypeName PSObject -Property $props
    11 }
    
    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 sau
    • 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

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
6

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

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
7

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

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
8

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ả

Bạn có thể viết mã html trong powershell không?
hình ảnh004. png

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

1 Get-WmiObject -class Win32_OperatingSystem | ConvertTo-HTML | Out-File report.html
2 Get-WmiObject -class Win32_BIOS | ConvertTo-HTML | Out-File report.html -append
3 Get-WmiObject -class Win32_Service | ConvertTo-HTML | Out-File report.html -append
9

Để 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

Bạn có thể viết mã html trong powershell không?
hình ảnh006. png

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

 1 function Get-InfoOS {
 2     [CmdletBinding()]
 3     param(
 4         [Parameter(Mandatory=$True)][string]$ComputerName
 5     )
 6     $os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName
 7     $props = @{'OSVersion'=$os.version;
 8                'SPVersion'=$os.servicepackmajorversion;
 9                'OSBuild'=$os.buildnumber}
10     New-Object -TypeName PSObject -Property $props
11 }
0

Bây giờ tôi có thể chạy dự án

Bạn có thể viết mã html trong powershell không?
hình ảnh007. png

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ó

PowerShell có thể đọc HTML không?

Bước đầu tiên của bạn là đưa một số mã HTML vào trình bao. Để làm điều đó, bạn sẽ yêu cầu PowerShell truy xuất một trang từ máy chủ web, giống như cách trình duyệt web sẽ thực hiện tác vụ tương tự. PowerShell sẽ không vẽ hoặc hiển thị trang nhưng sẽ cho phép bạn làm việc với HTML thô .

Tôi có thể sử dụng PowerShell để phát triển web không?

PowerShell cấp cho bạn quyền truy cập vào hệ thống tệp trên máy tính, cho phép bạn thực hiện các yêu cầu máy chủ, v.v. Tuy nhiên, hướng dẫn chạy các tác vụ phát triển thường chỉ được cung cấp cho MacOS và Linux . Để hỗ trợ người dùng Windows, hướng dẫn này trình bày cách thực hiện các tác vụ phát triển web phổ biến bằng PowerShell.

PowerShell có thể tương tác với các trang web không?

PowerShell và Nội dung Web. PowerShell có một số cách để lấy dữ liệu từ một nguồn trên web, có thể là trang web bình thường hoặc API REST. Có sẵn hai lệnh ghép ngắn để thực hiện các yêu cầu web và PowerShell tất nhiên cũng có quyền truy cập vào mọi thứ .

Tôi có thể viết mã trên Windows PowerShell không?

Ngoài ra, bạn có thể sử dụng bảng điều khiển PowerShell ISE tích hợp để viết mã tập lệnh của mình trên Windows 10 . Môi trường tập lệnh tích hợp là một công cụ nâng cao, nhưng bạn có thể bắt đầu sử dụng các bước sau. Mở bắt đầu. Tìm kiếm Windows PowerShell ISE, bấm chuột phải vào kết quả trên cùng và chọn tùy chọn Chạy với tư cách quản trị viên.