[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ĩ