簡體   English   中英

如何編寫Powershell腳本以列出多個服務器上的可用數據庫?

[英]how to write powershell script to list the available databases from multiple servers?

要求:我的要求是我必須列出150台服務器上的可用數據庫。 每個服務器至少有1個實例,最多有15個實例。

下面的腳本僅適用於sqlserver.txt中列出的實例,但是我需要在多個服務器之間獲取多個實例。

高度重視幫助。

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       
}

您可以使用此腳本查找網絡上所有可訪問的實例並在其中運行查詢:

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參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM