2015-09-04 29 views
3
$serversoffline = @() 
function checkServerByName { 
    $serverlist = Get-Content $SERVERLIST 
    $processlist = Get-Content $PROCESSMONITOR 
    $results = @() 
    $processnotrunning = @() 

    foreach ($server in $serverlist) { 
     if((Test-Connection -Cn $server -BufferSize 16 -Count 1 -ea 0 -quiet)) { 
      Write-Host "Server Online" 
      Write-Host "Checking For Process" 
      foreach($process in $processlist) { 
       checkProcessByName $server $process 
      } 
     } else { 
      Write-Host "Server Offline" 
      $serversoffline += $server 
     } 
    } 
    sendEmailServersOffline 
} 

function sendEmailServersOffline { 
    $message = $message + "The following servers are OFFLINE as of $((get-date).DateTime)." + "<br><br>" 
    foreach($server in $serversoffline) 
    { 
     $message += $server + "<br>" 
    } 
    Send-MailMessage -To $to -Subject $subject -BodyAsHtml $message -From $from -Credential $cred -SmtpServer $emailserver -Debug 
} 

checkServerByName 

上述代碼不起作用。它把所有的服務器放在一起,沒有任何空格或換行符如何在PowerShell中解析數​​組

+1

如何打印/輸出'$ msg'?你爲什麼認爲'
'會爲你做任何事情? –

+0

是BR在我的HTML電子郵件中引入換行符。 PowerShell正在創建消息,然後通過電子郵件發送。 –

+0

'
'是一個HTML標記,並且不會在PowerShell輸出中創建換行符。使用'''n「'換行。 –

回答

1

它會覺得(除非你在其他地方聲明)你沒有聲明$serversoffline作爲一個數組。你只是簡單的字符串。

例子:

PS C:\Users\mmaeda> $Concat += "This" 
PS C:\Users\mmaeda> $Concat += "That" 
PS C:\Users\mmaeda> $Concat 
ThisThat 
PS C:\Users\mmaeda> $Array = @() 
PS C:\Users\mmaeda> $Array += "This" 
PS C:\Users\mmaeda> $Array += "That" 
PS C:\Users\mmaeda> $Array 
This 
That 

補充說明一下:什麼是$results$processnotrunning?我沒有看到它們被用於當前代碼中的任何內容。

+0

輸出是什麼樣的?輸入是什麼樣的(serverlist,processlist)? 我在想這可能是一個問題,無論是範圍或輸入。 –