forked from dsccommunity/SqlServerDsc
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGet-SqlDscInstalledInstance.ps1
More file actions
99 lines (77 loc) · 2.35 KB
/
Get-SqlDscInstalledInstance.ps1
File metadata and controls
99 lines (77 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<#
.SYNOPSIS
Returns the installed instances on the current node.
.DESCRIPTION
Returns the installed instances on the current node.
.PARAMETER InstanceName
Specifies the instance name to return instances for.
.PARAMETER ServiceType
Specifies the service type to filter instances by. Valid values are
'DatabaseEngine', 'AnalysisServices', and 'ReportingServices'.
.OUTPUTS
`[System.Object[]]`
.EXAMPLE
Get-SqlDscInstalledInstance
Returns all installed instances.
#>
function Get-SqlDscInstalledInstance
{
[CmdletBinding()]
[OutputType([System.Object[]])]
param
(
[Parameter()]
[System.String]
$InstanceName,
[Parameter()]
[ValidateSet('DatabaseEngine', 'AnalysisServices', 'ReportingServices')]
[System.String[]]
$ServiceType
)
if ($PSBoundParameters.ContainsKey('InstanceName'))
{
$InstanceName = $InstanceName.ToUpper()
}
$instances = @()
$installedServiceType = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names' -ErrorAction 'SilentlyContinue'
foreach ($currentServiceType in $installedServiceType)
{
$serviceTypeName = switch ($currentServiceType.PSChildName)
{
'OLAP'
{
'AnalysisServices'
break
}
'SQL'
{
'DatabaseEngine'
break
}
'RS'
{
'ReportingServices'
break
}
}
if ($PSBoundParameters.ContainsKey('ServiceType') -and $serviceTypeName -notin $ServiceType)
{
continue
}
$instanceNames = $currentServiceType.GetValueNames()
foreach ($currentInstanceName in $instanceNames)
{
if ($PSBoundParameters.ContainsKey('InstanceName') -and $currentInstanceName -ne $InstanceName)
{
continue
}
$foundInstance = [PSCustomObject] @{
ServiceType = $serviceTypeName
InstanceName = $currentInstanceName
InstanceId = $currentServiceType.GetValue($currentInstanceName)
}
$instances += $foundInstance
}
}
return $instances
}