调用-Sqlcmd 无法 运行
Invoke-Sqlcmd unable to run
我有一个 PowerShell 脚本可以检查 运行 正在使用的服务器的 CPU 级别,然后如果它高于某个阈值,它将 运行 SQL 存储过程和电子邮件。
脚本 运行 在我的开发服务器上使用最新版本的 PowerShell 正确运行。但是,我在需要从中获取 CPU 值的实时服务器上 运行ning Invoke-Sqlcmd
命令时遇到问题。例如,它可以称为 LIVESERVER。
我认为是 运行ning PowerShell 2.0:
The term 'Invoke-Sqlcmd' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
我不想对此服务器进行任何更改,因为它对业务至关重要(除非这是一项无需重新启动即可更新 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
}
}
这应该有助于您的调试!
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
确保您已经为 SQL 服务器安装了 Powershell 模块:
然后尝试导入模块SQLPS:
Import-Module SQLPS
PowerShell v2 不会自动加载模块,因此您需要自己加载相关模块或管理单元:
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
[Source]
如果 import-module 失败,那么您需要先 运行 install-module。默认情况下,安装 SSMS 或 SSDT 不包括 sqlserver 模块。
install-module sqlserver
update-module sqlserver
import-module sqlserver
在这个问题上花了将近一个小时。当我 运行 使用 MS Build 的脚本时,我收到以下错误消息。
SQLCMD : The term 'SQLCMD' is not recognized as the name of a cmdlet,
function, script file, or operable program.
我终于发现 在 SQL 服务器安装后重新启动 windows 服务器 有神奇的效果。现在我的脚本 运行 流畅。
我有一个 PowerShell 脚本可以检查 运行 正在使用的服务器的 CPU 级别,然后如果它高于某个阈值,它将 运行 SQL 存储过程和电子邮件。
脚本 运行 在我的开发服务器上使用最新版本的 PowerShell 正确运行。但是,我在需要从中获取 CPU 值的实时服务器上 运行ning Invoke-Sqlcmd
命令时遇到问题。例如,它可以称为 LIVESERVER。
我认为是 运行ning PowerShell 2.0:
The term 'Invoke-Sqlcmd' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
我不想对此服务器进行任何更改,因为它对业务至关重要(除非这是一项无需重新启动即可更新 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
}
}
这应该有助于您的调试!
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
确保您已经为 SQL 服务器安装了 Powershell 模块:
然后尝试导入模块SQLPS:
Import-Module SQLPS
PowerShell v2 不会自动加载模块,因此您需要自己加载相关模块或管理单元:
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
[Source]
如果 import-module 失败,那么您需要先 运行 install-module。默认情况下,安装 SSMS 或 SSDT 不包括 sqlserver 模块。
install-module sqlserver
update-module sqlserver
import-module sqlserver
在这个问题上花了将近一个小时。当我 运行 使用 MS Build 的脚本时,我收到以下错误消息。
SQLCMD : The term 'SQLCMD' is not recognized as the name of a cmdlet, function, script file, or operable program.
我终于发现 在 SQL 服务器安装后重新启动 windows 服务器 有神奇的效果。现在我的脚本 运行 流畅。