2015-09-04 27 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)? 我在想这可能是一个问题,无论是范围或输入。 –