2017-03-13 15 views
0

実行中のサーバーのCPUレベルをチェックするPowerShellスクリプトがあり、それが特定のしきい値を超えるとSQLストアドプロシージャと電子メールが実行されます。Invoke-Sqlcmdが実行できません

最新のバージョンのPowerShellを使用している開発サーバーでスクリプトが正しく動作します。しかし、私はInvoke-Sqlcmdコマンドを実行中のサーバー上でCPU値を取得する必要がある問題があります。例えば、LIVESERVERと呼ぶことができます。 私が問題だと思うこれのPowerShell 2.0を実行している:

用語「起動-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 
    } 
} 

答えて

1

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

私のために働いた
Add-PSSnapin SqlServerCmdletSnapin100 
Add-PSSnapin SqlServerProviderSnapin100 

[Source]

+0

私は似たような試みてエラーを持っていたとして、私は以前に間違ったSNAPINSをロードしておく必要があります。ありがとう! – Ricky

2

これはあなたのデバッグを支援する必要があります

は、ここに私のスクリプトです!

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 
関連する問題