gpt4 book ai didi

sql-server - Powershell的Powershell DBCC CheckDB

转载 作者:行者123 更新时间:2023-12-02 23:47:32 26 4
gpt4 key购买 nike

我想知道是否有人可以帮助显示以下代码。我基本上是在尝试尽可能重新整理此代码,以便允许我对名为“servers.txt”的文本文件中提供的一组服务器名称运行它。

DBCC应该由PS脚本运行,并针对该服务器名的所有数据库运行。我对PS的了解不够快,无法了解如何针对此脚本执行此操作。

如何更改它以允许插入值,而不是为每个服务器名进行硬编码?

我已经阅读了一些有关此内容的内容,并查看了Invoke-Sql命令,我认为这是对PS的SQL 2008扩展。

不幸的是,PS环境是从SQL 2005盒中提取的,我没有能力进行移动,因此不要以为可以使用invoke

请查看原始代码,然后查看我的实验以尝试使用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"}

但是,上述测试运行无法正常工作的原因:

The term 'Invoke-Sqlcmd' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path.

最佳答案

对脚本进行了一些修改。除了连接字符串和底部的几行用于加载servers.txt文件(每个实例一行一行的文本文件)并枚举其内容之外,其他所有内容基本相同。

function Execute-DBCC
{
param (
[parameter(Mandatory = $true)][string]$serverInstance
)

$connString = "Server=$serverInstance;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

$masterCmd.CommandText = "EXECUTE master.sys.sp_MSforeachdb 'DBCC CHECKDB([?]) WITH TABLERESULTS'"
$masterConn.Open()
$reader = $masterCmd.ExecuteReader()

if ($reader.HasRows -eq $true)
{
while ($reader.Read())
{
$messageText = $reader["MessageText"]

if ($reader["Level"] -gt 10)
{ Write-Host $messageText -backgroundcolor Yellow -foregroundcolor Red }
else
{ Write-Host $messageText }
}

$reader.Close()
}

$masterConn.Close()
}




[void][reflection.assembly]::LoadWithPartialName("System.Data.SqlClient")

$servers = @(Get-Content ".\servers.txt")

$servers | %{
Execute-DBCC $_
}

关于sql-server - Powershell的Powershell DBCC CheckDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14961380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com