Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell ping、磁盘和服务检查_Powershell - Fatal编程技术网

Powershell ping、磁盘和服务检查

Powershell ping、磁盘和服务检查,powershell,Powershell,我被要求编写一个PowerShell脚本来执行以下操作: Ping服务器列表并在Ping失败时发送电子邮件 如果ping成功,请检查磁盘空间,确保其可用空间超过500MB。如果低于此阈值,请通过电子邮件发送警报 检查IISADMIN和CCMEXEC服务是否正在运行,如果未运行,请再次发送电子邮件通知。 我已经想出了下面的代码,但它似乎不能正常工作,需要另一双眼睛来帮助我 $rtn=$null $Computer=$null $EmailRecipient=xxx@xxx.com,xxx@xxx.

我被要求编写一个PowerShell脚本来执行以下操作:

Ping服务器列表并在Ping失败时发送电子邮件 如果ping成功,请检查磁盘空间,确保其可用空间超过500MB。如果低于此阈值,请通过电子邮件发送警报 检查IISADMIN和CCMEXEC服务是否正在运行,如果未运行,请再次发送电子邮件通知。 我已经想出了下面的代码,但它似乎不能正常工作,需要另一双眼睛来帮助我

$rtn=$null $Computer=$null $EmailRecipient=xxx@xxx.com,xxx@xxx.com 从以XXXXX开头的AD查找所有计算机 $Computers=Get-ADComputer-Filter{name-Like XXXXX*}| select-ExpandProperty name Ping每台计算机 ForEach$计算机在$计算机中{ $rtn=测试连接-CN$computer.toUpper-Count 1-BufferSize 16-Quiet 如果$rtn-匹配“False”{ 发送电子邮件说无法访问计算机 写入主机$计算机无法访问 发送邮件消息-从ICT桌面警报-至$EmailRecipient-主题DP检查器-无法访问-$Computer-Smtpserver emailrelay } } 如果$rtn-匹配“True”{ { foreach$计算机在$计算机中{ 获取wmiobject Win32_LogicalDisk-computername$computer-ErrorAction SilentlyContinue | where object{$\ uu0.FreeSpace-lt 500MB}| foreach object{ 发送邮件-从xxx@xxx.com-至$EmailRecipient-主题DP检查器-低硬盘空间-$Computer-Smtpserver emailrelay } } } { 如果$IIS.State-ne“正在运行”{ 发送邮件-从xxx@xxx.com-发送至$EmailRecipient-主题DP检查器-服务-IIS-未运行-$Computer-Smtpserver emailrelay } } { 如果$SMS.State-ne“正在运行”{ 发送邮件-从xxx@xxx.com-发送至$EmailRecipient-主题DP检查器-服务-短信-未运行-$Computer-Smtpserver emailrelay } } } 检查IIS和SMS服务是否正在运行 foreach$计算机在$计算机中{ $IIS=获取WmiObject Win32_服务-筛选器名称='IISADMIN'-ComputerName$computer-erroraction silentlycontinue $SMS=获取WmiObject Win32_服务-筛选器名称='ccmexec'-ComputerName$computer-erroraction silentlycontinue }
脚本中的逻辑已中断。您首先ping所有计算机。之后,仅当与最后一台计算机的连接成功时,才在所有计算机上运行磁盘检查,并在您没有实际查询服务的状态时尝试确定服务的状态。然后无条件地在所有计算机上再次运行实际服务检查

将您的逻辑更改为以下内容:

ForEach$计算机在$计算机中{ $rtn=测试连接-CN$计算机-计数1-缓冲区大小16-安静 如果-不是$rtn{ ping失败了 发送邮件。。。 }否则{ 平成功了 获取WmiObject Win32_LogicalDisk-计算机$Computer| ?{$\.FreeSpace-lt 500MB}| %{发送邮件…} 获取WmiObject Win32_服务-Computer$Computer-Filter Name='IISADMIN'| ?{$\.State-ne'Running'}| %{发送邮件…} 获取WmiObject Win32_服务-Computer$Computer-Filter Name='ccmexec'| ?{$\.State-ne'Running'}| %{发送邮件…} } }
你需要更具体,而不是工作不正常。这就像把你的车带到一个机械师那里,告诉他它需要修理。你说不工作是什么意思?如果你能告诉我们发生了什么事情,就更容易了。删除第17行的电子邮件以防止垃圾邮件。道歉。ping部分工作正常,但磁盘检查部分似乎根本不工作。我相信下面的IF$rtn-match'True'部分应该与上面的部分在同一个括号内,但是当我尝试这样做时,它也不起作用。