我想創建一個腳本,通過我們所有的SQL Server實例的一個文本文件,自動迭代,並添加每個上,如果它不存在於CMS。我想通過SMO嘗試這樣做,而不是硬編碼SQL字符串。下面是我迄今爲止,但它似乎並沒有工作。任何幫助,將不勝感激。謝謝。添加SQL Server實例中央管理服務器組使用PowerShell
最終,我會添加更多的如果語句分配情況,以某些羣體,但現在我只是想獲得它填充了一切。
$CMSInstance = "cmsinstancename"
$ServersPath = "C:\Scripts\InPutFiles\servers.txt"
#Load SMO assemplies
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Management.RegisteredServers') | out-null
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Management.Common') | out-null
$connectionString = "Data Source=$CMSINstance;Initial Catalog=master;Integrated Security=SSPI;"
$sqlConnection = new-object System.Data.SqlClient.SqlConnection($connectionString)
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$CMSStore = new-object Microsoft.SqlServer.Management.RegisteredServers.RegisteredServersStore($conn)
$CMSDBStore = $CMSStore.ServerGroups["DatabaseEngineServerGroup"]
$Servers = Get-Content $ServersPath;
foreach($Server in $Servers)
{
#Put this in loop to deal with duplicates in list itself
$AlreadyRegisteredServers = @()
$CMSDBStore.GetDescendantRegisteredServers()
$RegServerName = $Server.Name
$RegServerInstance = $Server.Instance
if($AlreadyRegisteredServers -notcontains $RegServerName)
{
Write-Host "Adding Server $RegServerName"
$NewServer = New-Object Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer($CMSDBStore, "$RegServerName")
$NewServer.SecureConnectionString = "server=$RegServerInstance;integrated security=true"
$NewServer.ConnectionString = "server=$RegServerInstance;integrated security=true"
$NewServer.ServerName = "$RegServerInstance"
$NewServer.Create()
}
else
{
Write-Host "Server $RegServerName already exists - cannot add."
}
}
什麼錯誤你好嗎? 「它似乎沒有工作」並不是非常具體。 – dpw
開始小一點。選擇一個您知道不在CMS中的服務器並嘗試添加該服務器。 –
它不添加服務器是什麼不對的地方,我已經嘗試添加一臺服務器,我知道心不是有已,香港專業教育學院甚至試圖清除CMS表在msdb中,從頭開始,這並不工作之一:/ – Skunny11