首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ping、磁盘和服务检查

ping、磁盘和服务检查
EN

Stack Overflow用户
提问于 2014-12-12 16:04:09
回答 1查看 602关注 0票数 1

我被要求拿出一个PowerShell脚本来做以下工作:

  1. Ping服务器列表,如果ping不成功,则发送电子邮件
  2. 如果ping成功,请检查磁盘空间以确保它有超过500 it的空闲空间。如果低于此阈值,请发送警报。
  3. 若要检查IISADMIN和CCMEXEC服务是否正在运行,请再次发送警报。

我已经提出了下面的代码,但它似乎没有正确的工作,需要另一双眼睛来帮助我。

代码语言:javascript
复制
$rtn = $null
$Computer = $null
$EmailRecipient = "xxx@xxx.com","xxx@xxx.com"

# Lookup all computers from AD starting with XXXXX
$Computers = Get-ADComputer -Filter {name -Like "XXXXX*"} | select -ExpandProperty name

# Ping each computer
ForEach ($Computer in $Computers) {
    $rtn = Test-Connection -CN $computer.toUpper() -Count 1 -BufferSize 16 -Quiet

    IF ($rtn -match 'False') {
        # Send email to say computer unreachable
        #write-host $computer "unreachable"
        Send-MailMessage -From "ICT DESKTOP ALERTS<XXX@XXX.co.uk>" -To $EmailRecipient -Subject "DP Checker - Unreachable - $Computer" -Smtpserver emailrelay
    }
}

IF ($rtn -match 'True') {
    {
        foreach ( $computer in $computers ) {
            get-wmiobject Win32_LogicalDisk -computername $computer -ErrorAction SilentlyContinue | where-object { $_.FreeSpace -lt 500MB } | foreach-object {
                Send-MailMessage -From "xxx@xxx.com<xxx@xxx.com>" -To $EmailRecipient -Subject "DP Checker - Low HDD space - $Computer" -Smtpserver emailrelay
            }
        }
    }
    {
        IF ($IIS.State -ne 'Running') {
            Send-MailMessage -From "xxx@xxx.com<xxx@xxx.com>" -To $EmailRecipient -Subject "DP Checker - Service - IIS - Not Running - $Computer" -Smtpserver emailrelay
        }
    }
    {
        IF ($SMS.State -ne 'Running') {
            Send-MailMessage -From "xxx@xxx.com<xxx@xxx.com>" -To $EmailRecipient -Subject "DP Checker - Service - SMS - Not Running - $Computer" -Smtpserver emailrelay
        }
    }
}

# Check if IIS and SMS services are running
foreach ($computer in $computers) {
    $IIS = Get-WmiObject Win32_Service -Filter "Name = 'IISADMIN'" -ComputerName $computer -erroraction silentlycontinue
    $SMS = Get-WmiObject Win32_Service -Filter "Name = 'ccmexec'" -ComputerName $computer -erroraction silentlycontinue
}
EN

回答 1

Stack Overflow用户

发布于 2014-12-12 19:10:53

您的脚本中的逻辑被破坏了。你先平所有的电脑。在此之后,只有当连接到上一台计算机的连接成功时,才在所有计算机上运行磁盘检查,并在尚未实际查询服务状态时尝试确定服务的状态。然后无条件地运行实际的服务检查(同样是在所有计算机上)。

将您的逻辑更改为如下所示:

代码语言:javascript
复制
ForEach ($computer in $computers) {
  $rtn = Test-Connection -CN $computer -Count 1 -BufferSize 16 -Quiet

  if (-not $rtn) {
    # ping failed
    Send-MailMessage ...
  } else {
    # ping succeeded
    Get-WmiObject Win32_LogicalDisk -Computer $computer |
      ? { $_.FreeSpace -lt 500MB } |
      % { Send-MailMessage ... }

    Get-WmiObject Win32_Service -Computer $computer -Filter "Name='IISADMIN'" |
      ? { $_.State -ne 'Running' } |
      % { Send-MailMessage ... }
    Get-WmiObject Win32_Service -Computer $computer -Filter "Name='ccmexec'" |
      ? { $_.State -ne 'Running' } |
      % { Send-MailMessage ... }
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27447484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档