#将需要读取的域名和端口列表保存在名为ports01.txt、ports02的文件中,文件与脚本位于相同目录下
$CurrentPath = $MyInvocation.MyCommand.Path.substring(0,$MyInvocation.MyCommand.Path.LastIndexOf('\')+1)$file = "ports01.txt"$FilePath = $CurrentPath + $file$Infors = Get-Content $FilePath
$Temp_PortStatushtm = "C:\Windows\Temp\PortStatushtm.htm"If (Test-Path $Temp_PortStatushtm)
{Remove-Item $Temp_PortStatushtm}$Domainname = $Infors[0].Split(",")[0]#将域名解析为IP,因为可能会解析出多个IP,此处只取第一个IP$IP = [System.Net.Dns]::GetHostAddresses($Domainname)[0]Start-Sleep -Milliseconds 500#判断IP是否格式正确$Address = [System.Net.IPAddress]::Parse($IP)$IPstring = $Address.IPAddressToString#端口连通性测试函数
Function Port-Test ($Address,$Port){ $Timeout = 1000 $Socket = New-Object System.Net.Sockets.TCPClient $Connect = $Socket.BeginConnect($Address,$Port,$null,$null) Start-Sleep -Milliseconds 500 If ( $Connect.IsCompleted ) { $Wait = $Connect.AsyncWaitHandle.WaitOne($TimeOut,$false) If(!$Wait) { $Socket.Close() Return $false } Else{ $Socket.EndConnect($Connect) $Socket.Close() Return $true } } Else{Return $false}}
$Server = $Domainname + " : " + $IPstring
#将结果临时保存到名为csv的hash表中,便于html格式的输出$csv=@()Foreach ($infor in $Infors){ $port = $Infor.Split(",")[1] $Status= Port-Test $Address $port $content=""|select Port,Status $content.Port = $port $content.Status = $status $csv += $content}#输出HTML格式:
#-head:控制整体样式#{$_ -replace "<table>","<table align=center>"}:表格居中显示#$_ -replace "<td>","<td bgcolor=cyan>"}:改变表格列背景颜色$csv|Select Port,Status | ConvertTo-Html ` -head '<style type="text/css"> body,table,td,th {font-family:Tahoma; color:Black; Font-Size:20pt} body {text-align:center} th {font-weight:bold}</style>' ` -Title "Port Monitor" ` -Body "<H4>$server</H4>" | ` ForEach{$_ -replace "<table>","<table align=center>"} |` ForEach{$_ -replace "<td>","<td bgcolor=cyan>"} | ` Foreach{ If($_ -like "*false</td>*") {$_ -replace "<td bgcolor=cyan>false","<td bgcolor=red>False"} #Elseif($_ -like "*true</td>*") # {$_ -replace "<td bgcolor=cyan>true","<td bgcolor=green>True"} Else{$_} } >>$Temp_PortStatushtm#Invoke-Item $Temp_PortStatushtm
##############################################################################$file = "ports02.txt"
$FilePath = $CurrentPath + $file$Infors = Get-Content $FilePath
$Temp_PortStatushtm = "C:\Windows\Temp\PortStatushtm.htm"$Domainname = $Infors[0].Split(",")[0]
$IP = [System.Net.Dns]::GetHostAddresses($Domainname)[0]Start-Sleep -Milliseconds 500$Address = [System.Net.IPAddress]::Parse($IP)$IPstring = $Address.IPAddressToString$t = " √ "
$f = " × "Function Port-Test ($Address,$Port){ $Timeout = 1000 $Socket = New-Object System.Net.Sockets.TCPClient $Connect = $Socket.BeginConnect($Address,$Port,$null,$null) Start-Sleep -Milliseconds 500 If ( $Connect.IsCompleted ) { $Wait = $Connect.AsyncWaitHandle.WaitOne($TimeOut,$false) If(!$Wait) { $Socket.Close() Return $false } Else{ $Socket.EndConnect($Connect) $Socket.Close() Return $true } } Else{Return $false}}
$Server = $Domainname + " : " + $IPstring
$csv=@()Foreach ($infor in $Infors){ $port = $Infor.Split(",")[1] $Status= Port-Test $Address $port $content=""|select Port,Status $content.Port = $port $content.Status = $status $csv += $content}$csv|Select Port,Status | ConvertTo-Html ` -head '<style type="text/css"> body,table,td,th {font-family:Tahoma; color:Black; Font-Size:20pt} body {text-align:center} th {font-weight:bold}</style>' ` -Title "Port Monitor" ` -Body "<H4>$server</H4>" | ` ForEach{$_ -replace "<table>","<table align=center>"} |` ForEach{$_ -replace "<td>","<td bgcolor=cyan>"} | ` Foreach{ If($_ -like "*false</td>*") {$_ -replace "<td bgcolor=cyan>false","<td bgcolor=red>False"} Else{$_} } >>$Temp_PortStatushtm#打开html输出结果
Invoke-Item $Temp_PortStatushtm参考:http://www.pstips.net/creating-colorful-html-reports.html
====================================
导出html格式文件:
Get-Website|Select @{Label="Sitename";Expression={$_.Name}}, @{Label="Logdir";Expression={"W3SVC" + $_.id}} |sort Sitename |ConvertTo-Html |out-file d:\iislog\Readme.htm -Force
导出html格式文件,包含超链接:
Add-Type -AssemblyName System.Web
$ip = (gwmi Win32_NetworkAdapterConfiguration -Filter "IPEnabled='true'" | ? {$_.DefaultIPGateway -ne $null}).IPAddress[0]$html = Get-Website|Select @{Label="Website";Expression={$_.Name}}, @{Label="Website Log";Expression={'<a href="http://' + $ip + ":11000/W3SVC" + $_.id + '">' + "http://" + $ip + ":11000/W3SVC" + $_.id + '</a>'}} |sort Website |ConvertTo-Html$html = $html | % { if($_ -match 'a href' ) { [System.Web.HttpUtility]::HtmlDecode($_) } else { $_ } }$html |out-file d:\iislog\Readme.htm -Force