web-dev-qa-db-ja.com

Invoke-Sqlcmdを実行できません

実行中のサーバーのCPUレベルを確認するPowerShellスクリプトがあり、特定のしきい値を超えると、SQLストアドプロシージャと電子メールが実行されます。

PowerShellは、最新バージョンのPowerShellを使用して、開発サーバーで正しく実行されます。ただし、CPU値を取得する必要があるライブサーバーでInvoke-Sqlcmdコマンドを実行すると問題が発生します。例として、LIVESERVERと呼ぶことができます。私は問題だと思うPowerShell 2.0を実行しています:

「Invoke-Sqlcmd」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれていた場合は、パスが正しいことを確認してから再試行してください。

このサーバーはビジネスクリティカルであるため、このサーバーに変更を加えたくないです(再起動などを行わずに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
    }
}
5
Ricky

PowerShell v2はモジュールを自動ロードしないため、関連するモジュールまたはスナップインを自分でロードする必要があります。

Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100

[ ソース ]

5
Ansgar Wiechers

これはデバッグに役立つはずです!

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
8
gvee

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/

7
Paweł Dyl

import-moduleが失敗した場合、最初にinstall-moduleを実行する必要があります。 SSMSまたはSSDTのインストールには、デフォルトではsqlserverモジュールが含まれていません。

install-module sqlserver
update-module sqlserver
import-module sqlserver
4
Brent