2
我想知道是否有人可以幫助顯示下面的代碼。我基本上試圖讓這個代碼重新哈希,如果可能的話,讓我運行它在一個名爲「servers.txt」的文本文件中提供的一組服務器名稱。Powershell的Powershell DBCC CheckDB
的DBCC應該由PS腳本運行和運行對所有DB爲服務器名。我沒有足夠的速度與PS瞭解如何爲此腳本執行此操作。
如何改變它允許值的堵塞,而不是被硬編碼爲每個服務器名?
我讀過解決此一點,看了看Invoke-Sql
命令我相信這是一個SQL 2008擴展PS。
不幸的是,PS的環境是一個SQL 2005框和我沒有能力讓這個移動的,所以不要把我想歪了能夠使用調用
請查看原代碼,然後我的實驗,試圖得到它使用invoke來運行。
$ScriptName = $myInvocation.MyCommand.Name
[void][reflection.assembly]::LoadWithPartialName("System.Data.SqlClient")
$ConnString = "Server=DB-OCC05;Integrated Security=SSPI;Database=master;Application Name=$ScriptName"
$MasterConn = new-object ('System.Data.SqlClient.SqlConnection') $ConnString
$MasterCmd = new-object System.Data.SqlClient.SqlCommand
$MasterCmd.Connection = $MasterConn
$SqlDBCC = "DBCC CHECKDB(master) WITH TABLERESULTS"
$MasterCmd.CommandText = $SqlDBCC
$MasterConn.Open()
$Rset = $MasterCmd.ExecuteReader()
If ($Rset.HasRows -eq $true) {
While ($Rset.Read()) {
$line = $Rset["MessageText"]
If ($Rset["Level"] -gt 10) {
Write-Host $line -backgroundcolor Yellow -foregroundcolor Red
} else {
Write-Host $line
}
}
$Rset.Close()
}
$MasterConn.Close()
然後我的測試從SQL運行2005環境:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
而且也嘗試一下測試:
gc "C:\Powershell\Servers.txt" | foreach-object {Invoke-Sqlcmd "DBCC checkdb;" -ServerInstance "$_\MyInstance"}
但上面的測試運行的沒有工作的原因:
術語'Invoke-Sqlcmd'不被識別爲n小命令,功能,腳本文件或可操作程序。檢查名稱的拼寫,或者路徑。
這是極好的謝謝 - 它工作得很好..我不能要求更多,但我是!抱歉!你能幫我看看如何將結果導出到一個csv文件,例如..我看到有命令Export-Csv「c:\ powershell \ reports \ DBCC_results.csv」例如.. – MoOriginal 2013-02-20 14:15:18
這樣的事情? {Export-Csv「c:\ powershell \ DBCC \ $ messageText-DBCC.csv」} – MoOriginal 2013-02-20 14:32:37
已經在txt文件中測試了只有一個服務器名稱的腳本,即使嘗試了不同的服務器 - 2008和2005,也得到相同的錯誤.... .........它似乎管理主數據庫,然後跟着.......................例外調用「0」關閉「參數:「Timeout expired。超時時間在操作完成之前已經過去或者服務器沒有響應。」在C:\ Powershell \ CheckDB.ps1:27 char:22 + $ reader.Close <<<<()+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException – MoOriginal 2013-02-20 15:15:19