严格地说,问题是,我使用这个解决方案并且它有效,但是有更好的方法吗?
有以下警告。
1)我不想在网络范围内搜索SQL实例,我正在查询已知的SQL服务器,但我想在每个服务器上获取实例名称。
2)代码假定Microsoft永远不会更改SQL Server服务的显示名称。
function getSQLInstance ([string]$SERVER) {
$services = Get-Service -Computer $SERVER
# Filter for SQL services
$services = $services | ? DisplayName -like "SQL Server (*)"
# Remove MSSQL$ qualifier to get instance name
try {
$instances = $services.Name | ForEach-Object {($_).Replace("MSSQL`$","")}
}catch{
# Error if none found
return -1
}
return $instances
}
getSQLInstance "YOUR_SERVER"
答案 0 :(得分:0)
不要重新发明轮子,而是查看SQL Power Doc如何发现服务器上的实例。从NetworkScan.psm1
开始,看起来与您的方法非常相似:
$ManagedComputer.Services | ForEach-Object {
if (($_.Name).IndexOf('$') -gt 0) {
$InstanceName = ($_.Name).Substring(($_.Name).IndexOf('$') + 1)
$IsNamedInstance = $true
$ManagedComputerServerInstanceName = $InstanceName
} else {
$InstanceName = $null
$IsNamedInstance = $false
$ManagedComputerServerInstanceName = $_.Name
}
或者,只需使用SQL Power Doc并将其指向特定的服务器名称即可收集此信息以及有关实例的更多数据。