Skip to main content
 首页 » 编程设计

powershell之如何在 PowerShell 中解析数组

2024年12月31日15del

$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 

上面的代码不起作用。它将所有服务器放在一起,没有任何空格或换行符

请您参考如下方法:

很明显(除非您在其他地方声明)您没有将 $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 有什么用?我没有看到它们在当前代码中用于任何用途。