0
我得到了這個Powershell腳本,它獲取有關SQL Server是否安裝在主機上並獲取SQL Server版本和其他詳細信息的信息。使用SMO從SQL Server收集數據非常慢
它從txt文件獲取主機列表並將信息保存到DataTable
。
$data = New-Object ('System.Data.DataTable')
$data.Columns.Add('Host name') | Out-Null
$data.Columns.Add('Ip Address') | Out-Null
$data.Columns.Add('SQL Server Product Name') | Out-Null
$data.Columns.Add('SQL Server Edition') | Out-Null
$data.Columns.Add('SQL Server Version') | Out-Null
$data.Columns.Add('SQL Server Type') | Out-Null
$data.Columns.Add('SQL Server Status') | Out-Null
Get-Content .\servers.txt | ForEach {
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
$row = $data.NewRow()
$row['Host name'] = $_
try {
$row['Ip Address'] = [Net.Dns]::GetHostEntry($_).AddressList.IpAddressToString
}
catch [System.Net.Sockets.SocketException] {
$row['Ip Address'] = 'Offline'
}
If ($row['Ip Address'] -eq 'Offline') {
$row['SQL Server Product Name'] = 'N/A'
$row['SQL Server Edition'] = 'N/A'
$row['SQL Server Version'] = 'N/A'
$row['SQL Server Type'] = 'N/A'
$row['SQL Server Status'] = 'N/A'
}
else {
$smo = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $_
$row['SQL Server Product Name'] = $smo.Product + ' ' + $smo.ProductLevel
$row['SQL Server Edition'] = $smo.Edition
$row['SQL Server Version'] = $smo.VersionString
$row['SQL Server Type'] = $smo.ServerType
$row['SQL Server Status'] = $smo.Status
}
$smo.ConnectionContext.Disconnect()
$data.Rows.Add($row)
}
$data | Format-Table -AutoSize
此腳本的問題是運行需要很長時間(超過一小時的113個服務器列表)。
有什麼方法可以加快進程?