Màu báo cáo PowerShell HTML

[Tham số[Bắt buộc=$True]][chuỗi]$Tên máy tính

$os = Get-WmiObject -class Win32_OperatingSystem -ComputerName $ComputerName

$props = @{'OSVersion'=$os. phiên bản

'SPVersion'=$os. phiên bản chính của gói dịch vụ;

'OSBuild'=$os. số xây dựng}

Đối tượng mới -TypeName PSObject -Property $props

chức năng Get-InfoCompSystem {

[Tham số[Bắt buộc=$True]][chuỗi]$Tên máy tính

$cs = Get-WmiObject -class Win32_ComputerSystem -ComputerName $ComputerName

$props = @{'Model'=$cs. người mẫu;

'Nhà sản xuất'=$cs. nhà chế tạo;

'RAM [GB]'="{0. N2}" -f [$cs. tổng bộ nhớ vật lý / 1GB];

'Ổ cắm'=$cs. số bộ xử lý;

'Lõi'=$cs. số bộ xử lý logic}

Đối tượng mới -TypeName PSObject -Property $props

chức năng Get-InfoBadService {

[Tham số[Bắt buộc=$True]][chuỗi]$Tên máy tính

$svcs = Get-WmiObject -class Win32_Service -ComputerName $ComputerName `

-Filter "StartMode='Auto' AND State'Running'"

foreach [$svc bằng $svcs] {

$props = @{'ServiceName'=$svc. Tên;

'Tài khoản đăng nhập'=$svc. tên bắt đầu;

'Tên hiển thị'=$svc. tên hiển thị}

Đối tượng mới -TypeName PSObject -Property $props

[Tham số[Bắt buộc=$True]][chuỗi]$Tên máy tính

$procs = Get-WmiObject -class Win32_Process -ComputerName $ComputerName

foreach [$proc trong $procs] {

$props = @{'ProcName'=$proc. Tên;

'Có thể thực thi'=$proc. Đường dẫn thực thi}

Đối tượng mới -TypeName PSObject -Property $props

[Tham số[Bắt buộc=$True]][chuỗi]$Tên máy tính

$nics = Get-WmiObject -class Win32_NetworkAdapter -ComputerName $ComputerName `

-Bộ lọc "PhysicalAdapter=True"

foreach [$nic trong $nics] {

$props = @{'NICName'=$nic. Tên dịch vụ;

'Tốc độ'=$nic. tốc độ / 1MB -as [int];

'Nhà sản xuất'=$nic. nhà chế tạo;

'MACAddress'=$nic. địa chỉ MAC}

Đối tượng mới -TypeName PSObject -Property $props

[Tham số[Bắt buộc=$True]][chuỗi]$Tên máy tính

$drives = Get-WmiObject -class Win32_LogicalDisk -ComputerName $ComputerName `

foreach [$drive in $drives] {

$props = @{'Drive'=$drive. ID thiết bị;

'Size'=$drive. kích thước / 1GB -as [int];

'Miễn phí'="{0. N2}" -f [$drive. dung lượng trống / 1GB];

'FreePct'=$drive. dung lượng trống/ổ đĩa $. kích thước * 100 -as [int]}

Đối tượng mới -TypeName PSObject -Property $props

Một trong những cách sử dụng phổ biến nhất của PowerShell là thu thập dữ liệu và sau đó tạo báo cáo từ dữ liệu đó, điều này làm cho nó trở thành một công cụ tuyệt vời. PowerShell có thể xuất dữ liệu cho mục đích báo cáo sang một số định dạng khác nhau, bao gồm CSV, XML và HTML. Nhưng thông thường, bạn chỉ có thể xuất dữ liệu ở dạng thô và bạn sẽ phải sử dụng các công cụ khác để làm cho báo cáo trông đẹp mắt

Tôi không biết điều gì đã chiếm hữu mình, nhưng một ngày nọ, tôi bắt gặp một tập lệnh cũ hơn sử dụng PowerShell để tạo báo cáo HTML hiển thị mức sử dụng ổ đĩa cho một nhóm máy tính. Việc sử dụng được hiển thị bằng cách sử dụng dải màu từ xanh sang đỏ để cung cấp tham chiếu trực quan. Khi tôi xem mã, tôi đã nghĩ về những gì sẽ thú vị để thêm vào và bây giờ một hoặc hai ngày sau tôi có một cái gì đó mới để cho bạn thấy

Quản lý và báo cáo Active Directory, Exchange và Microsoft 365 với
ManageEngine ADManager Plus - Tải xuống bản dùng thử miễn phí

Ưu đãi độc quyền trên ADManager Plus cho Hoa Kỳ và Vương quốc Anh . Yêu cầu ngay bây giờ.

Chức năng này có thể đã được sửa đổi bằng cách sử dụng các lệnh trong mô-đun Lưu trữ như Get-Volume và Get-Disk. Nhưng tôi đã quyết định sử dụng Get-CimInstance để truy vấn các lớp Win32_* truyền thống. Tôi cũng muốn tận dụng việc sử dụng Get-CimAssociatedInstance để nắm bắt thông tin bổ sung. Bạn có thể tìm thấy tệp tập lệnh dưới dạng ý chính trên Github

Cách sử dụng khá đơn giản. Bạn chỉ định một hoặc nhiều máy tính và tắt đi. Có một giá trị mặc định cho tệp HTML kết quả, nhưng bạn có thể muốn chỉ định giá trị của riêng mình. Vì chức năng này đang tạo HTML tùy chỉnh một cách nhanh chóng nên tôi cũng cung cấp các tùy chọn để bạn cung cấp tài liệu HTML trước và sau nội dung, giống như bạn có thể làm với ConvertTo-HTML. Tôi cũng cung cấp cho bạn một tùy chọn để chỉ định tệp đồ họa được hiển thị dưới dạng logo ở đầu báo cáo. Tệp đồ họa sẽ được nhúng trong tệp HTML. CSS cũng được nhúng trong HTML làm cho toàn bộ tệp hoàn toàn độc lập

$params = @{
Computername = 'bovine320','dom1','think51','srv1','win10'
Path = 'c:\work\r.html'
Precontent = "

Company Confidential

" PostContent = "This report is provided as-is. Use commands like Get-Volume to validate." LogoPath = 'c:\scripts\db.png' } New-HTMLDiskReport @params

Khi bạn xem qua mã, hãy chú ý cách tôi đang sử dụng Tiến trình ghi để thông báo cho người dùng. Đây là thứ tôi muốn nhiều bạn sử dụng hơn thay vì Write-Host. Nó làm cho mã của bạn chuyên nghiệp hơn nhiều. Để tôi cho bạn xem kết quả

Độ dốc màu là hiển nhiên nhưng hãy để tôi chỉ ra một vài điều khác. Chú ý chân trang

Đây là điều tôi đã bắt đầu thực hiện trong tập lệnh báo cáo HTML của mình và tôi khuyến khích bạn nghĩ về. Tại một số thời điểm, bạn có thể thiết lập một tập lệnh như thế này để chạy như một công việc hoặc nhiệm vụ đã lên lịch. Có lẽ gửi email cho một nhóm Quản trị viên. Theo thời gian và với sự luân chuyển của nhân viên, bạn có thể tự hỏi “Điều này đến từ đâu?” . Tôi tạo một đối tượng tùy chỉnh và chuyển đổi nó thành một đoạn HTML

#add some metadata about this report
[xml]$metadata = [pscustomobject]@{
    "Report Run" = "$[[Get-Date].ToUniversalTime[]] UTC"
    "Run By"     = "$[$env:USERDOMAIN]\$env:username"
    Originated   = $env:Computername
    Command      = $[$myinvocation.invocationname]
    Version      = "2.0"
} | ConvertTo-html -as List -Fragment

Nếu bạn xem mã, bạn sẽ thấy các bước bổ sung để chèn thẻ kiểu

Tính năng khác là việc sử dụng thuộc tính Tiêu đề hoặc phiên bản tùy chỉnh để hiển thị thông tin bổ sung. Nếu bạn di chuột qua tên máy tính, bạn sẽ thấy một cửa sổ bật lên với hệ điều hành

Vì tôi lưu HTML dưới dạng XML nên tôi có thể dễ dàng phân tích cú pháp và cập nhật nó

#convert drive objects to HTML but as an XML document
Write-Verbose "Converting to XML"
[xml]$html = $drives | ConvertTo-Html -Fragment

#add the computer name as the table caption
$caption = $html.CreateElement["caption"]
$html.table.AppendChild[$caption] | Out-Null
$html.table.caption = $data[0].SystemName
$pop = $html.CreateAttribute["title"]
$pop.value = [Get-Ciminstance -ClassName Win32_OperatingSystem -Property caption -cimsession $cs].caption
$html.table.item["caption"].attributes.append[$pop] | Out-Null

Tôi làm điều tương tự với thông tin phương tiện vật lý khi bạn di chuột qua ID thiết bị

Lấy thông tin sử dụng Get-CimassociatedInstance. Vì một máy tính có thể có nhiều ổ đĩa nên tôi tạo một bảng băm bằng cách sử dụng ID thiết bị làm khóa và phiên bản DiskDrive làm giá trị

#initialize a hashtable of for phsyical media
$hash = @{}
#Create a custom object for each drive
$drives = foreach [$item in $data] {
                        
    $Physical = $item | Get-CimAssociatedInstance -ResultClassName Win32_DiskPartition | Get-CimAssociatedInstance -ResultClassName Win32_DiskDrive
    $hash.Add[$item.DeviceID,$physical]

    $prophash = [ordered]@{
        Drive         = $item.DeviceID
        Volume        = $item.VolumeName
        SizeGB        = $item.size / 1GB -as [int]
        FreeGB        = "{0:N4}" -f [$item.Freespace / 1GB]
        PercentFree   = [math]::Round[[$item.Freespace / $item.size] * 100, 2]
    }
    New-Object PSObject -Property $prophash
} #foreach item

Sau này tôi thêm một lớp mẹo tùy chỉnh

#add physical media as a popup for each device
for [$i=1; $i -le $html.table.tr.count -1;$i++] {
    $id = $html.table.tr[$i].ChildNodes[0]."#text"
    $pop = $html.CreateAttribute["tip"]
    $props = [$hash.Item[$id] | Select-Object -property Caption,SerialNumber,FirmwareRevision,Size,InterfaceType,SCSI* | Out-String].trim[]     
    $pop.Value = $props
    $html.table.tr[$i].ChildNodes[0].Attributes.append[$pop] | Out-Null
}

Phần khó nhất, vì tôi không phải là người thiết kế web, nên có được cài đặt kiểu chính xác để hiển thị văn bản gọn gàng

td[tip]:hover {
    color: #ff2283;
    position: relative;
}

td[tip]:hover:after {
    content: attr[tip];
    left: 0;
    top: 100%;
    margin-left: 80px;
    margin-top: 10px;
    width: 400px;
    padding: 3px 8px;
    position: absolute;
    color: #85003a;
    font-family: 'Courier New', Courier, monospace;
    font-size: 10pt;
    background-color: gainsboro;
    white-space: pre-wrap;
}

Nhưng tôi phải nói rằng tôi thích cách nó diễn ra

Bạn có thể không cần tập lệnh này khi nó được viết, nhưng hy vọng rằng tôi đã cung cấp cho bạn một vài ý tưởng và một số mẫu mã để bắt đầu làm việc với. Thưởng thức và tôi hy vọng bạn sẽ cho tôi biết những gì bạn nghĩ

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á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.

Làm cách nào để tích hợp HTML với PowerShell?

PowerShell cung cấp một lệnh ghép ngắn tích hợp có tên là ConvertTo-Html. Điều này lấy các đối tượng làm đầu vào và chuyển đổi từng đối tượng thành trang web HTML. Để sử dụng tính năng này, chỉ cần lấy đầu ra và chuyển trực tiếp sang ConvertTo-Html . Lệnh ghép ngắn sau đó sẽ trả về một chuỗi HTML lớn.

Báo cáo HTML là gì?

Báo cáo HTML có thể được định nghĩa là sử dụng ngôn ngữ HTML để tạo báo cáo trên web hoặc báo cáo được tạo bởi trình tạo báo cáo HTML . Ngoài HTML, bạn cũng có thể nghe nói về HTML5. Đây là phiên bản mới nhất của lập trình HTML, cho phép nhiều loại dữ liệu hơn [e. g. video, âm thanh] được kết hợp.

Chủ Đề