Invoke-Sqlcmd не может быть запущен
У меня есть сценарий PowerShell, который проверяет уровень процессора сервера, на котором он работает, а затем, если он превышает определенный порог, он запускает хранимую процедуру SQL и электронную почту.
Сценарий правильно работает на моем сервере разработки с последней версией PowerShell. Тем не менее, у меня проблемы с запуском Invoke-Sqlcmd
Команда на живом сервере, мне нужно получить значения процессора. Для примера это можно назвать LIVESERVER. Это работает PowerShell 2.0, который, я думаю, является проблемой:
Термин "Invoke-Sqlcmd" не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.
Я бы не стал вносить какие-либо изменения в этот сервер, так как это критично для бизнеса (если это не простая задача обновления PowerShell без перезагрузок и т. Д.).
Можно ли запустить мой сценарий с моего сервера разработки и указать сервер, с которого нужно получать данные о процессоре? Я не уверен, как синтаксис будет работать для достижения этой цели.
Вот мой сценарий:
# 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
}
}
5 ответов
PowerShell v2 не загружает модули автоматически, поэтому вам нужно загрузить соответствующие модули или оснастки самостоятельно:
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
[ Источник]
Если import-module не работает, вам нужно сначала запустить install-module. Установка SSMS или SSDT по умолчанию не включает модуль sqlserver.
install-module sqlserver
update-module sqlserver
import-module sqlserver
Это должно помочь вашей отладке!
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:
Затем попробуйте импортировать модуль SQLPS:
Import-Module SQLPS
Смотрите также: https://blogs.msdn.microsoft.com/psssql/2008/09/02/sql-server-2008-management-tools-basic-vs-complete-explained/
На этот вопрос потратил почти час. У меня было следующее сообщение об ошибке, когда я запускал скрипты с помощью MS Build.
SQLCMD: термин «SQLCMD» не распознается как имя командлета, функции, файла сценария или работающей программы.
Наконец я обнаружил, что перезапуск сервера Windows после установки SQL-сервера сделал чудо. Теперь мои скрипты работают гладко.