我有一个 PowerShell 脚本,它检查正在运行的服务器的 CPU 级别,然后如果它高于某个阈值,它将运行 SQL 存储过程和电子邮件。
该脚本使用最新版本的 PowerShell 在我的开发服务器上正确运行。但是,我在Invoke-Sqlcmd
需要从中获取 CPU 值的实时服务器上运行命令时遇到问题。例如,它可以称为 LIVESERVER。它正在运行 PowerShell 2.0,我认为这是问题所在:
术语“Invoke-Sqlcmd”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。
我宁愿不对这台服务器进行任何更改,因为它对业务至关重要(除非这是一项无需重新启动等即可更新 PowerShell 的简单任务)。
是否可以从我的开发服务器运行我的脚本并指定要从中获取 CPU 数据的服务器?我不确定语法将如何实现这一点。
这是我的脚本:
# Email
$recipients = @("Ricky <ricky@email.com>")
# Loop 20 times
for ($i= 1; $i -le 20; $i++) {
# Find CPU average usage percentage for given time period
$cpuutil = (Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 20 |
select -ExpandProperty countersamples |
select -ExpandProperty cookedvalue |
Measure-Object -Average).Average
# Display average CP output
$cpuutil
# If CPU average percentage is higher than given value, run stored procedure and
# e-mail to notify
if ($cpuutil -ge 60) {
Invoke-Sqlcmd -Query "SELECT * FROM [Vehicle].[dbo].[tblIndicator]" -ServerInstance "LIVESERVER"
}
if ($cpuutil -ge 60) {
Send-MailMessage -From "serverchecks@email.com" -To $recipients -Body "SP Ran" -Subject "Stored Procedure" -Dno onSuccess, onFailure -SmtpServer 111.1.1.111
} else {
Start-Sleep -s 10
}
}