@@ -191,4 +191,132 @@ Describe 'Get-SqlDscManagedComputerService' -Tag @('Integration_SQL2017', 'Integ
191191 $firstService.Parent.Name | Should - Be $script :mockServerName
192192 }
193193 }
194+
195+ Context ' When validating extended properties with WithExtendedProperties parameter' {
196+ It ' Should return services with all extended properties added' {
197+ $result = Get-SqlDscManagedComputerService - ServerName $script :mockServerName - WithExtendedProperties - ErrorAction ' Stop'
198+
199+ $result | Should -Not - BeNullOrEmpty
200+ $result | Should - BeOfType ([Microsoft.SqlServer.Management.Smo.Wmi.Service ])
201+
202+ # Verify each service has all extended properties
203+ foreach ($service in $result )
204+ {
205+ $service.PSObject.Properties.Name | Should - Contain ' ManagedServiceType'
206+ $service.PSObject.Properties.Name | Should - Contain ' ServiceExecutableVersion'
207+ $service.PSObject.Properties.Name | Should - Contain ' ServiceStartupType'
208+ $service.PSObject.Properties.Name | Should - Contain ' ServiceInstanceName'
209+
210+ # If the service is a SQL Server service, verify it has a converted type
211+ if ($service.Type -eq ' SqlServer' )
212+ {
213+ $service.ManagedServiceType | Should - Be ' DatabaseEngine'
214+ }
215+ elseif ($service.Type -eq ' SqlBrowser' )
216+ {
217+ $service.ManagedServiceType | Should - Be ' SQLServerBrowser'
218+ }
219+ elseif ($service.Type -eq ' SqlAgent' )
220+ {
221+ $service.ManagedServiceType | Should - Be ' SqlServerAgent'
222+ }
223+
224+ # Verify ServiceStartupType is normalized
225+ if ($service.StartMode -eq ' Auto' )
226+ {
227+ $service.ServiceStartupType | Should - Be ' Automatic'
228+ }
229+ }
230+ }
231+
232+ It ' Should have ServiceInstanceName for named instances' {
233+ $result = Get-SqlDscManagedComputerService - ServerName $script :mockServerName - InstanceName $script :mockInstanceName - WithExtendedProperties - ErrorAction ' Stop'
234+
235+ if ($result )
236+ {
237+ $result | Should - BeOfType ([Microsoft.SqlServer.Management.Smo.Wmi.Service ])
238+
239+ # All returned services should have ServiceInstanceName property
240+ foreach ($service in $result )
241+ {
242+ $service.PSObject.Properties.Name | Should - Contain ' ServiceInstanceName'
243+ $service.ServiceInstanceName | Should - Be $script :mockInstanceName
244+ }
245+ }
246+ }
247+
248+ It ' Should have ServiceExecutableVersion populated when executable exists' {
249+ $result = Get-SqlDscManagedComputerService - ServerName $script :mockServerName - ServiceType ' DatabaseEngine' - WithExtendedProperties - ErrorAction ' Stop'
250+
251+ $result | Should -Not - BeNullOrEmpty
252+
253+ # At least one service should have a version
254+ $servicesWithVersion = $result | Where-Object - FilterScript { $null -ne $_.ServiceExecutableVersion }
255+ $servicesWithVersion | Should -Not - BeNullOrEmpty
256+
257+ # Verify version is of correct type
258+ foreach ($service in $servicesWithVersion )
259+ {
260+ $service.ServiceExecutableVersion | Should - BeOfType ([System.Version ])
261+ }
262+ }
263+
264+ Context ' When filtering by ServiceType with WithExtendedProperties' {
265+ It ' Should return only Database Engine services with all extended properties' {
266+ $result = Get-SqlDscManagedComputerService - ServerName $script :mockServerName - ServiceType ' DatabaseEngine' - WithExtendedProperties - ErrorAction ' Stop'
267+
268+ $result | Should -Not - BeNullOrEmpty
269+ $result | Should - BeOfType ([Microsoft.SqlServer.Management.Smo.Wmi.Service ])
270+
271+ # All returned services should be of type SqlServer and have all extended properties
272+ foreach ($service in $result )
273+ {
274+ $service.Type | Should - Be ' SqlServer'
275+ $service.PSObject.Properties.Name | Should - Contain ' ManagedServiceType'
276+ $service.ManagedServiceType | Should - Be ' DatabaseEngine'
277+ $service.PSObject.Properties.Name | Should - Contain ' ServiceExecutableVersion'
278+ $service.PSObject.Properties.Name | Should - Contain ' ServiceStartupType'
279+ $service.PSObject.Properties.Name | Should - Contain ' ServiceInstanceName'
280+ }
281+ }
282+ }
283+
284+ Context ' When using managed computer object with WithExtendedProperties' {
285+ BeforeAll {
286+ $script :managedComputerObjectForExtended = Get-SqlDscManagedComputer - ServerName $script :mockServerName - ErrorAction ' Stop'
287+ }
288+
289+ It ' Should return services with all extended properties from pipeline' {
290+ $result = $script :managedComputerObjectForExtended | Get-SqlDscManagedComputerService - WithExtendedProperties - ErrorAction ' Stop'
291+
292+ $result | Should -Not - BeNullOrEmpty
293+ $result | Should - BeOfType ([Microsoft.SqlServer.Management.Smo.Wmi.Service ])
294+
295+ # Verify each service has all extended properties
296+ foreach ($service in $result )
297+ {
298+ $service.PSObject.Properties.Name | Should - Contain ' ManagedServiceType'
299+ $service.PSObject.Properties.Name | Should - Contain ' ServiceExecutableVersion'
300+ $service.PSObject.Properties.Name | Should - Contain ' ServiceStartupType'
301+ $service.PSObject.Properties.Name | Should - Contain ' ServiceInstanceName'
302+ }
303+ }
304+ }
305+ }
306+
307+ Context ' When not using WithExtendedProperties parameter' {
308+ It ' Should not add extended properties to service objects' {
309+ $result = Get-SqlDscManagedComputerService - ServerName $script :mockServerName - ErrorAction ' Stop'
310+
311+ $result | Should -Not - BeNullOrEmpty
312+ $result | Should - BeOfType ([Microsoft.SqlServer.Management.Smo.Wmi.Service ])
313+
314+ # Verify extended properties are NOT added
315+ $firstService = $result | Select-Object - First 1
316+ $firstService.PSObject.Properties.Name | Should -Not - Contain ' ManagedServiceType'
317+ $firstService.PSObject.Properties.Name | Should -Not - Contain ' ServiceExecutableVersion'
318+ $firstService.PSObject.Properties.Name | Should -Not - Contain ' ServiceStartupType'
319+ $firstService.PSObject.Properties.Name | Should -Not - Contain ' ServiceInstanceName'
320+ }
321+ }
194322}
0 commit comments