gpt4 book ai didi

sql-server - Powershell 脚本启动服务(如果服务已停止)并等待一分钟并发送电子邮件通知

转载 作者:行者123 更新时间:2023-12-02 20:42:36 25 4
gpt4 key购买 nike

我对 Powershell 非常陌生,在学习阶段,我尝试创建一个脚本来自动执行以下任务。该脚本没有按我的预期工作。您能否查看一下并给我一些帮助。

我的任务是,

我正在尝试找出处于停止状态的 SQL 服务(多个服务器中的多个 SQL 服务)并尝试启动它,等待一分钟以完成服务启动并再次验证服务状态。如果仍然处于停止状态,我正在尝试向人员发送电子邮件以进行操作。

您能否检查一下下面的代码并更正错误,我试图找到它但无法找到

#Define servers & Services Variables
$Servers = GC "E:\Bhanu\SQLServer.txt"
$Services = GC "E:\Bhanu\SQLService.txt"

#Function Call
Function ServiceStatus ($Servers, $Services)
{
foreach ($Server in $Servers)
{
foreach ($Service in $Services)
{
$Servicestatus = get-service -ComputerName $Server -Name $Service
if ($Servicestatus.Status -eq "Stopped")
{
Start-service $Service
Start-Sleep -Seconds 60
$ServiceStatus1 = Get-Service -ComputerName $Server -Name $Service
if ($Servicestatus1.Status -eq "Stopped")
{
FuncMail -To “abc@gmail.com” -From “abc@gmail.com” -Subject $Server + $Service "fails to Start, Take immediate Action to avoid Impact” -Body $ServiceName "Service fails to Start, Take immediate Action to avoid Impact” -smtpServer “servername”
}
}
}
}
}


function FuncMail
{
#param($strTo, $strFrom, $strSubject, $strBody, $smtpServer)
param($To, $From, $Subject, $Body, $smtpServer)
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = $From
$msg.To.Add($To)
$msg.Subject = $Subject
$msg.IsBodyHtml = 1
$msg.Body = $Body
$smtp.Send($msg)
}

servicestatus $Servers $Services

如果您需要我提供的任何信息,请告诉我

最佳答案

嗨,这不是最好的方法,我正在以快速的方式做到这一点。注意 %=foreach-object; ?=Where-对象。

如果您的 smtp 服务器需要身份验证,则必须将密码保存在一个文件中,否则请勿使用 read-host -assecurestring | 运行它。转换自安全字符串 |输出文件“C:\Secure\Password.txt”

我还假设您将服务器保存在一个文件中。
我的解决方案是启动所有 sql server 服务,如果您想启动特定的服务,只需将服务名称保存在一个文件的单独一行上。

要执行的代码如下。

#Loading Server and service details
$Services=Get-content C:\PS\Service.txt
$servidores=get-content C:\PS\Servers\Servers.txt

#Loading Mail credential
$Mailpasswordpath="C:\PS\Securestring.txt"
$Mailusername="DOmain\User"
$password=cat $Mailpasswordpath |ConvertTo-Securestring
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Mailusername,$password


$servidores|Foreach-Object{Get-Service -ComputerName $_ -Name $Services }| #Get the services running on all servers
Where-Object{$_.Status -eq "Stopped"}| #Which status is equal stopped
Foreach-Object{
$_.Start(); #try to start
Start-Sleep -Seconds 60; #wait one minute
$_.Refresh(); #refresh then service to update status

#validate is status still stopped
if($_.Status -eq "Stopped")
{
#LOADING Mail details
$To="user@domain.com"
$subject="$($_.MachineName) $($_.Name) fails to Start, Take immediate Action to avoid Impact"
$From="ServiceStatus@domain.com"
$smtp="Server.domain.com"
$body="$($_.Name) Service fails to Start, Take immediate Action to avoid Impact"

#Sending email to notify
Send-MailMessage -To $To -Subject $subject -From $From -SmtpServer $smtp -Body $body -Credential $Cred
}
}

P.S:这不是最好的方法,我只是决定解决这个问题。如果您愿意,我们可以稍后一起创建一个函数,只需先测试它即可。

关于sql-server - Powershell 脚本启动服务(如果服务已停止)并等待一分钟并发送电子邮件通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31651897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com