11

我有一个 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
    }
}
4

5 回答 5

13

如果import-module失败,那么您需要先运行install-module。安装 SSMS 或 SSDT 默认不包含 sqlserver 模块。

install-module sqlserver
update-module sqlserver
import-module sqlserver
于 2019-06-10T15:03:05.077 回答
11

这应该有助于您的调试!

if (-not (Get-Command Invoke-Sqlcmd -ErrorAction SilentlyContinue)) {
    Write-Error "Unabled to find Invoke-SqlCmd cmdlet"
}

if (-not (Get-Module -Name SqlServer | Where-Object {$_.ExportedCommands.Count -gt 0})) {
    Write-Error "The SqlServer module is not loaded"
}

if (-not (Get-Module -ListAvailable | Where-Object Name -eq SqlServer)) {
    Write-Error "Can't find the SqlServer module"
}

Import-Module SqlServer -ErrorAction Stop
于 2017-03-13T12:11:18.393 回答
8

确保您已使用 SQL Server 安装了 Powershell 模块: 在此处输入图像描述

然后尝试导入模块 SQLPS:

Import-Module SQLPS

另请参阅:https ://blogs.msdn.microsoft.com/psssql/2008/09/02/sql-server-2008-management-tools-basic-vs-complete-explained/

于 2017-03-13T12:13:27.700 回答
7

PowerShell v2 不会自动加载模块,因此您需要自己加载相关模块或管理单元:

Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100

[来源]

于 2017-03-13T12:16:06.980 回答
0

在这个问题上花了将近一个小时。使用 MS Build 运行脚本时出现以下错误消息。

SQLCMD:术语“SQLCMD”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。

我终于发现在安装 SQL Server 后重新启动 Windows Server确实很神奇。现在我的脚本运行顺利。

于 2021-06-14T14:17:41.310 回答