Invoke-Sqlcmd无法运行

问题描述:

我有一个PowerShell脚本来检查它运行的服务器的CPU级别,然后如果它高于某个阈值,它将运行SQL存储过程和电子邮件。Invoke-Sqlcmd无法运行

该脚本在我的开发服务器上使用最新版本的PowerShell正确运行。但是,我在运行需要从中获取CPU值的实时服务器上运行Invoke-Sqlcmd命令时遇到问题。为了举例,它可以被称为LIVESERVER。 它正在运行的PowerShell 2.0,我认为是问题:

“调用-SQLCMD”一词未被识别为cmdlet,函数,脚本文件或可操作的程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

我宁愿不对这台服务器做任何修改,因为它对业务至关重要(除非在不重新启动的情况下更新PowerShell这是一项简单的任务)。

是否可以从我的开发服务器运行我的脚本并指定服务器以获取CPU数据?我不确定语法如何实现这一点。

这里是我的脚本:

# Email 
$recipients = @("Ricky <[email protected]>") 

# 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 "[email protected]" -To $recipients -Body "SP Ran" -Subject "Stored Procedure" -Dno onSuccess, onFailure -SmtpServer 111.1.1.111 
    } else { 
     Start-Sleep -s 10 
    } 
} 

的PowerShell V2没有按不自动加载模块,因此您需要自行加载相关模块或管理单元:

Add-PSSnapin SqlServerCmdletSnapin100 
Add-PSSnapin SqlServerProviderSnapin100 

[Source]

+0

为我工作,我必须有以前加载的错误snapins因为我有错误,尝试类似的东西。谢谢! – Ricky

这将有助于你的调试!

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 

确保您已经安装了PowerShell模块与SQL Server: enter image description here

然后尝试导入模块SQLPS:

Import-Module SQLPS 

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