2017-03-13 83 views
0

我有一個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 
    } 
} 

回答

1

的PowerShell V2沒有按不自動加載模塊,因此您需要自行加載相關模塊或管理單元:

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