2016-09-24 121 views
-1

要求:下面的代碼將提供實例名稱和數據庫詳細信息&來自C:\PowerSQL\SQL_Servers.txt中可用的實例或服務器列表中的數據庫狀態。Powersehll - 實施登錄失敗的嘗試服務器?

對於少數服務器無法連接&拋出錯誤。我想將這些失敗的嘗試服務器名稱作爲Log.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  
} 

對此的幫助非常感謝。

+0

的問題是非常類似於[此](http://stackoverflow.com/questions/39470677/how-to-write-powershell-script-to-list-the-available-databases-from-多ser),甚至代碼...看到我的答案,它可能會幫助[鏈接](http://stackoverflow.com/a/39471534/2893376)只是改變'wtite-host'部分,寫入日誌文件。 – gofr1

+0

感謝您的答覆。該代碼將有助於列出域中的所有服務器詳細信息,但我只需要在sql_server.txt中指定的少數列出的服務器詳細信息。我需要將錯誤詳細信息保存在log.csv或log.txt中,並將正確的詳細信息保存到分隔文件中。 – Franklin

+0

你在開玩笑吧?而不是域檢查,只需使用您的文件,而不是寫入主機,在log.txt中寫入。就這樣。 – gofr1

回答

0

以下代碼完全滿足我的要求。

Import-Module SQLPS -DisableNameChecking 
ForEach ($instance in Get-Content "C:\PowerSQL\SQL_Servers.txt") 
{ 
try { 
Invoke-SQLcmd -Server $instance -Database master 'select @@servername as InstanceName,name as DatabaseName,state_desc as DBStatus from sys.databases' 

$results += New-Object PSObject -Property $instanceinfo 

} catch { 
Add-Content "C:\PowerSQL\ErrorLog.txt" $instance 
} 
} 

$results | export-csv -Path C:\PowerSQL\SQLServerInstance.csv -NoTypeInformation