как написать сценарий powershell для отображения доступных баз данных с нескольких серверов?
Требование: Мое требование: я должен указать доступные базы данных из 150 серверов. Каждый сервер имеет минимум 1 и максимум 15 экземпляров.
Ниже сценария работает только для экземпляров, перечисленных в файле sqlserver.txt, но мне нужно получить несколько экземпляров на нескольких серверах.
Помощь очень приветствуется.
- Почему SQL SMO не возвращает мой просмотр?
- Suspended Invoke-SQLcmd Query - Используемая база данных
- Командлет sql server (sqlps) и удаленный сервер
- Как проверить правильность экземпляра SQL-сервера или нет с помощью powershell?
- Откройте SQL Server Management Studio и подключитесь к серверу из PowerShell
ForEach ($instance in Get-Content "C:\PowerSQL\SQL_Servers.txt") { Import-Module SQLPS -DisableNameChecking Invoke-SQLcmd -Server $instance -Database master 'select @@servername as InstanceName,name as DatabaseName,state_desc as DBStatus from sys.databases' | Format-Table }
- Строка вставки вставки в powershell для sql
- Powershell не будет запускать вложенный SQL-запрос
- Невозможно перечислить базы данных SQL Server из PowerShell
- проверить RAM, файл страницы, PAE, / 3GB, память сервера SQL с помощью powershell
- Как установить параметры базы данных с помощью SMO SQL Server и powershell из хэша?
- Ошибка сценария powershell для проверки подлинности Windows
- Установите максимальную память сервера SQL Server (MB) с помощью Powershell
- Как подождать копию базы данных SQL Server
Вы можете использовать этот скрипт для поиска всех доступных экземпляров в своей сети и выполнения запроса:
Import-Module SQLPS -DisableNameChecking $servers = [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources() ForEach ($i in $servers) { $instance = $i.ServerName+"\"+$i.InstanceName Invoke-SQLcmd -Server $instance -Database master 'select @@servername as InstanceName,name as DatabaseName,state_desc as DBStatus from sys.databases' | Format-Table }
Если вам нужно только имя сервера для передачи, используйте $instance = $i.ServerName
. Часть кода была взята отсюда давным-давно.
РЕДАКТИРОВАТЬ
С записью в CSV-файле и ошибкой:
Import-Module SQLPS -DisableNameChecking $servers = [System.Data.Sql.SqlDataSourceEnumerator]::Instance.GetDataSources() $results = @() ForEach ($i in $servers) { $instance = $i.ServerName+"\"+$i.InstanceName try { $sqlres = Invoke-SQLcmd -Server $instance -Database master 'select @@servername as InstanceName,name as DatabaseName,state_desc as DBStatus from sys.databases' ForEach($st in $sqlres) { $instanceinfo = @{ InstanceName = $st.InstanceName DatabaseName = $st.DatabaseName DBStatus = $st.DBStatus } $results += New-Object PSObject -Property $instanceinfo } } catch { "error when running Invoke-SQLcmd "+$instance Write-Host($error) } } $results | export-csv -Path D:\sql_instances_info.csv -NoTypeInformation
Я не уверен, в чем проблема. Вы можете поместить все серверы / экземпляры в файл txt и итерации:
#array of addresses, this can be fetched from file $list = "localhost\SQL2014",".\SQL2014","(local)\SQL2014" #MyServer\MyInstance $list | ` % { Invoke-Sqlcmd -Server $_ -Database master 'select @@servername as InstanceName,name as DatabaseName,state_desc as DBStatus from sys.databases' } | ` Format-Table -AutoSize
Если это удаленные серверы без интегрированной защиты, вам необходимо передать аргументы -UserName
и -Password
.