我有下面的脚本。它输出正常的屏幕,但我无法将其输出到html文件。我想我在foreach循环中做错了。
$style = "<style>"
$style = $style + "BODY{background-color:#eeeeee;}"
$style = $style + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$style = $style + "TH{text-align:center;width:140px; border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}"
$style = $style + "TD{text-align:center;border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:palegoldenrod}"
$style = $style + "</style>"
$ServerName = New-Object System.Collections.ArrayList
$EmailBody = @()
$thedate = Get-Date -format "dddd, dd MMMM yyyy HH:mm:ss"
$adfind = new-object DirectoryServices.DirectorySearcher
$adfind.SearchRoot = [ADSI]"LDAP://OU=,OU=,OU=,OU=,OU=,OU=,DC=,DC="
$adfind.Filter = "(&(objectClass=computer))"
$resultSet = $adfind.FindAll()
foreach($result in $resultset)
{
$adObject = $result.GetDirectoryEntry()
$ServerName.Add([string]$adobject.name)
}
#Uitzonderingen verwijderen en sorteren
$ServerName = $ServerName |Sort
#Variabelen voor warning niveau
$DriveDWarningLevel = "5"
#Poorten testen
function Test-Telnet($Server, $tcpport){
# Test Telnet Connection
$tcpclient = new-Object system.Net.Sockets.TcpClient
$connection = $tcpclient.BeginConnect($server,$tcpport,$null,$null)
$timeout = $connection.AsyncWaitHandle.WaitOne(300,$false) ## 3 second timeout can be modified
if(!$TimeOut){
$TCPclient.Close()
return $false
}
else{
try{
$TCPclient.EndConnect($Connection) | out-Null
$TCPclient.Close()
return $true
}
catch{
return $false
}
}
}
function FreeSpace ($Server, $Path) {
$timeout = new-timespan -Seconds 1
$sw = [diagnostics.stopwatch]::StartNew()
while ($sw.elapsed -lt $timeout){
try {
$Disks = Get-WmiObject -ComputerName $Server -Query {SELECT * FROM Win32_LogicalDisk WHERE DriveType = "3"}
}
catch {
return "FOUT"
}
finally {
foreach($disk in $disks) {
$deviceID = $disk.DeviceID
if ($deviceID -eq "D:"){
[float]$size = $disk.Size
[float]$freespace = $disk.FreeSpace
#return [Math]::Round($freespace / 1073741824, 2)
$freespace = [Math]::Round($freespace / 1073741824, 2)
}
}
}
return $freespace
}
}
function Get-ADProperties($Item){
$root = [ADSI]''
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.filter = "(&(objectClass=computer)(Name=$Item))"
$Result = $searcher.findone()
return $Result.properties
}
function Get-Uptime($Server) {
$wmi = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Server
$Uptime = $wmi.ConvertToDateTime($wmi.LastBootUptime)
return $Uptime
}
cls
foreach ($Server in $ServerName){
Write-Host "$Server | " -nonewline
$Kolom1 = "$Server"
# Port 1494 testen
$TestResult = Test-Telnet -Server $Server -tcpport "1494"
If ($TestResult -eq $true){
$Result1494 = "OKEE"
$Result1494Color = "green"
}
Else {
$Result1494 = "FOUT"
$Result1494Color = "red"
}
Write-Host "$Result1494" -foregroundcolor $Result1494Color -nonewline
Write-Host " | " -nonewline
$Kolom2 = "$Result1494"
#Port 2598 testen
$TestResult = Test-Telnet -Server $Server -tcpport "2598"
If ($TestResult -eq $true){
$Result2598 = "OKEE"
$Result2598Color = "green"
}
Else {
$Result2598 = "FOUT"
$Result2598Color = "red"
}
Write-Host "$Result2598" -foregroundcolor $Result2598Color -nonewline
Write-Host " | " -nonewline
$Kolom3 = "$Result2598"
#Port 135 testen
$TestResult = Test-Telnet -Server $Server -tcpport "135"
If ($TestResult -eq $true){
$Result135 = "OKEE"
$Result135Color = "green"
}
Else {
$Result135 = "FOUT"
$Result135Color = "red"
}
Write-Host "$Result135" -foregroundcolor $Result135Color -nonewline;
Write-Host " | " -nonewline
$Kolom4 = "$Result135"
#Ping testen
If(Test-Connection -ComputerName $Server -Count 1 -Quiet){
$ResultPing = "OKEE"
$ResultPingColor = "green"
}
Else {
$ResultPing = "FOUT"
$ResultPingColor = "red"
}
Write-Host "$ResultPing" -foregroundcolor $ResultPingColor -nonewline
Write-Host " | " -nonewline
$Kolom5 = "$ResultPing"
#FreeSpace testen
$FreeSpace = FreeSpace -Path "\\$Server\d$" -Server $Server
If ($freeSpace -lt $DriveDWarningLevel){
$freeSpaceGBColor = "red"
}
Else {
$freeSpaceGbColor = "green"
}
$freespace = "{0:N2}" -f $freespace
Write-Host "$freeSpace" -foregroundcolor $freeSpaceGBColor -nonewline
Write-Host " | " -nonewline
$Kolom6 = "$freeSpace"
#Server description ophalen
[string]$ServerDescription = (Get-ADProperties -Item $Server).description
Write-Host "$ServerDescription" -nonewline
Write-Host " | " -nonewline
$Kolom7 = "$ServerDescription"
#Uptime ophalen
$Uptime = Get-Uptime($Server)
$uptimecolor = "white"
Write-Host "$Uptime" -foregroundcolor $uptimecolor
$Kolom8 = "$Uptime"}
ConvertTo-HTML -head $style, -PreContent "<h3>Controle uitgevoerd op: $thedate</h3><br>
<table><tr><th>Kolom1</th><th>Kolom2</th><th>Kolom3</th><th>Kolom4</th><th>Kolom5</th> <th>Kolom6</th><th>Kolom8</th></tr>"
foreach ($Server in $ServerName){
"<tr><td>"+ $Kolom1 + "</td><td>"+ $Kolom2 + "</td><td>" + $Kolom3 + "</td><td>" + $Kolom4 + "</td><td>" + $Kolom5 + "</td><td>" + $Kolom6 + "</td><td>" + $Kolom8 + "</td></tr></table>" | ConvertTo-HTML -head $style | set-content "c:\kenny\citrix\test.htm"
}
我尝试将html放在循环中,就像我在phop中一样,但是在PowerShell中似乎有所不同。
答案 0 :(得分:0)
我认为这就是你想要的:
$style = @"
<style>
BODY{background-color:#eeeeee;}
TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}
TH{text-align:center;width:140px; border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}
TD{text-align:center;border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:palegoldenrod}
</style>
"@
$thedate = Get-Date -format "dddd, dd MMMM yyyy HH:mm:ss"
$ServerName = Get-ADComputer -Filter {OperatingSystem -Like "Windows Server*"} -searchbase "OU=,OU=,OU=,DC=,DC=" -Properties Description
#Variabelen voor warning niveau
$DriveDWarningLevel = "5"
#Poorten testen
function Test-Telnet($Server, $tcpport){
# Test Telnet Connection
$tcpclient = new-Object system.Net.Sockets.TcpClient
$connection = $tcpclient.BeginConnect($server.Name,$tcpport,$null,$null)
$timeout = $connection.AsyncWaitHandle.WaitOne(300,$false) ## 3 second timeout can be modified
if(!$TimeOut){
$TCPclient.Close()
return $false
}
else{
try{
$TCPclient.EndConnect($Connection) | out-Null
$TCPclient.Close()
return $true
}
catch{
return $false
}
}
}
function FreeSpace ($Server, $Path) {
$timeout = new-timespan -Seconds 1
$sw = [diagnostics.stopwatch]::StartNew()
while ($sw.elapsed -lt $timeout){
try {
$Disks = Get-WmiObject -ComputerName $Server.Name -Query {SELECT * FROM Win32_LogicalDisk WHERE DriveType = "3"}
}
catch {
return "FOUT"
}
finally {
foreach($disk in $disks) {
$deviceID = $disk.DeviceID
if ($deviceID -eq "D:"){
[float]$size = $disk.Size
[float]$freespace = $disk.FreeSpace
#return [Math]::Round($freespace / 1073741824, 2)
$freespace = [Math]::Round($freespace / 1073741824, 2)
}
}
}
return $freespace
}
}
function Get-Uptime($Server) {
$wmi = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Server.Name
$Uptime = $wmi.ConvertToDateTime($wmi.LastBootUptime)
return $Uptime
}
$Body = "<h3>Controle uitgevoerd op: $thedate</h3><br><table><tr><th>Kolom1</th><th>Kolom2</th><th>Kolom3</th><th>Kolom4</th><th>Kolom5</th> <th>Kolom6</th><th>Kolom8</th></tr>"
foreach ($Server in $ServerName){
Write-Host $Server.Name " | " -nonewline
$Kolom1 = $Server.Name
# Port 1494 testen
$TestResult = Test-Telnet -Server $Server -tcpport "1494"
If ($TestResult -eq $true){
$Result1494 = "OKEE"
$Result1494Color = "green"
}
Else {
$Result1494 = "FOUT"
$Result1494Color = "red"
}
Write-Host "$Result1494" -foregroundcolor $Result1494Color -nonewline
Write-Host " | " -nonewline
$Kolom2 = "$Result1494"
#Port 2598 testen
$TestResult = Test-Telnet -Server $Server -tcpport "2598"
If ($TestResult -eq $true){
$Result2598 = "OKEE"
$Result2598Color = "green"
}
Else {
$Result2598 = "FOUT"
$Result2598Color = "red"
}
Write-Host "$Result2598" -foregroundcolor $Result2598Color -nonewline
Write-Host " | " -nonewline
$Kolom3 = "$Result2598"
#Port 135 testen
$TestResult = Test-Telnet -Server $Server -tcpport "135"
If ($TestResult -eq $true){
$Result135 = "OKEE"
$Result135Color = "green"
}
Else {
$Result135 = "FOUT"
$Result135Color = "red"
}
Write-Host "$Result135" -foregroundcolor $Result135Color -nonewline;
Write-Host " | " -nonewline
$Kolom4 = "$Result135"
#Ping testen
If(Test-Connection -ComputerName $Server -Count 1 -Quiet){
$ResultPing = "OKEE"
$ResultPingColor = "green"
}
Else {
$ResultPing = "FOUT"
$ResultPingColor = "red"
}
Write-Host "$ResultPing" -foregroundcolor $ResultPingColor -nonewline
Write-Host " | " -nonewline
$Kolom5 = "$ResultPing"
#FreeSpace testen
$FreeSpace = FreeSpace -Path "\\$Server\d$" -Server $Server
If ($freeSpace -lt $DriveDWarningLevel){
$freeSpaceGBColor = "red"
}
Else {
$freeSpaceGbColor = "green"
}
$freespace = "{0:N2}" -f $freespace
Write-Host "$freeSpace" -foregroundcolor $freeSpaceGBColor -nonewline
Write-Host " | " -nonewline
$Kolom6 = "$freeSpace"
$ServerDescription = $Server.description
Write-Host "$ServerDescription" -nonewline
Write-Host " | " -nonewline
$Kolom7 = "$ServerDescription"
#Uptime ophalen
$Uptime = Get-Uptime($Server)
$uptimecolor = "white"
Write-Host "$Uptime" -foregroundcolor $uptimecolor
$Kolom8 = "$Uptime"
$Body += "<tr><td>$Kolom1</td><td>$Kolom2</td><td>$Kolom3</td><td>$Kolom4</td><td>$Kolom5</td><td>$Kolom6</td><td>$Kolom8</td></tr>"
}
$Body += "</table>"
ConvertTo-HTML -head $style -body $Body | set-content "C:\temp\test.htm"