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个服务器列表)。
有什么方法可以加快进程?