2014-03-03 57 views
0

我有下面的脚本。它输出很好的屏幕,但我不能得到它输出到一个HTML文件。我想我在foreach循环中做错了什么。Powershell转换为html

$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

我想这是你想要什么:

$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" 
+0

谢谢! :)我也可以在将来使用它! – user2959441