提问人:SuperZee 提问时间:8/8/2023 最后编辑:SuperZee 更新时间:8/9/2023 访问量:157
使用 PowerShell 验证 Windows 服务是否未运行,并发送包含信息的电子邮件
Using PowerShell to verify if a Windows Service isn't running and send an email with information
问:
我已经创建了这个 powershell 代码。 它运行并发送一封电子邮件,其中包含每台远程计算机、服务的详细信息以及似乎是状态。
但是,服务名称和状态似乎无法正常工作。此脚本的输出告诉我找不到该服务。但是,我已经通过在同一台机器上运行它来检查这一点,我运行了这个完整的脚本来验证服务是否存在并确定实际服务的状态;
Get-Service -ComputerName machine1 -Name MyService
我的完整 PowerShell 脚本如下;
# Define the list of machine names where the service should be checked
$machineNames = @("machine1","machine2") # Add more machine names as needed
# Define the service name to check
$serviceName = "MyService"
# Function to check service status on a specific machine
function Get-ServiceStatus {
param (
[string]$machineName,
[string]$service
)
$serviceStatus = Get-Service -ComputerName $machineName -Name $service -ErrorAction
SilentlyContinue
if ($serviceStatus) {
return $serviceStatus.Status
} else {
return "Service Not Found"
}
}
# Initialize an empty array to store information about services that are not running
$notRunningServices = @()
# Check the service status on each machine
foreach ($machine in $machineNames) {
$status = Get-ServiceStatus -machineName $machine -service $serviceName
if ($status -ne "Running") {
$notRunningServices += [PSCustomObject]@{
MachineName = $machine
ServiceName = $serviceName
Status = $status
}
}
}
# If there are services not running, send an email
if ($notRunningServices.Count -gt 0) {
$smtpServer = "smtp.server.com"
$smtpPort = 25
$fromAddress = "[email protected]"
$toAddress = "[email protected]"
$emailSubject = "MyService Service Status - Not Running"
$emailBody = "The following services are not running:`r`n`r`n"
foreach ($service in $notRunningServices) {
$emailBody += "Server: $($service.MachineName)`r`nService:
$($service.ServiceName)`r`nStatus: $($service.Status)`r`n`r`n"
}
Send-MailMessage -From $fromAddress -To $toAddress -Subject $emailSubject -Body $emailBody -
SmtpServer $smtpServer -Port $smtpPort
}
我需要解析 powershell 脚本以标识每台计算机上的远程服务名称。
电子邮件的副本在这里;
以下服务未运行:
服务器:machine1 服务:MyService 状态:未找到服务
服务器:machine2 服务:MyService 状态:未找到服务
如果有人能帮忙,将不胜感激。
提前致谢
注意:感谢 https://stackoverflow.com/users/21272873/toddy-s,他说我通过计划任务运行它是正确的。
答:
0赞
Toddy
8/8/2023
#1
我测试了您的脚本,它在我的测试环境中工作。
检查成员服务器 (TESTSRV) 和 ActiveDirectoryWebService (ADWS) 的 DC (TESTDC) 的结果:
$notRunningServices
MachineName ServiceName Status
----------- ----------- ------
TESTSRV ADWS Service Not Found
我假设您将其作为计划任务运行。
也许是权限问题?
更新:
如果要访问任务计划程序启动的脚本中的网络资源,则必须使用具有足够权限的用户帐户启动任务。
默认帐户“System”仅允许访问本地服务器。
您可以在任务的“常规”选项卡上更改此设置。
评论
Get-Service