Hi All, I’m having issues with my code, I’m specifying parameter set names but they don’t seem to be working anymore.
Get-NTService -ComputerName MYSERVER -StartMode Auto
.OUTPUTS
System.String, System.String
.NOTES
Additional information about the function.
#>
function Get-NTService
{
[CmdletBinding(DefaultParameterSetName = 'Default')]
[OutputType([System.String], ParameterSetName = 'Default')]
[OutputType([System.String], ParameterSetName = 'Service')]
[OutputType([System.String], ParameterSetName = 'Summary')]
[OutputType([System.String], ParameterSetName = 'StartMode')]
[OutputType([System.Object])]
param
(
[Parameter(ParameterSetName = 'Default',
Mandatory = $false,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true)]
[Parameter(ParameterSetName = 'Service')]
[Parameter(ParameterSetName = 'Summary')]
[Parameter(ParameterSetName = 'StartMode')]
[Alias('Server')]
[System.String]$ComputerName = 'localhost',
[Parameter(ParameterSetName = 'Default')]
[Parameter(ParameterSetName = 'StartMode')]
[Parameter(ParameterSetName = 'Service')]
[ValidateSet('Auto', 'AutoNotRunning', 'Manual', 'All', IgnoreCase = $true)]
[System.String]$StartMode = 'All',
[Parameter(ParameterSetName = 'Summary')]
[switch]$Summary,
[Parameter(ParameterSetName = 'Service')]
[Parameter(ParameterSetName = 'StartMode')]
[Parameter(ParameterSetName = 'Default')]
[System.String]$ServiceName,
[Parameter(ParameterSetName = 'Service',
Mandatory = $false)]
[Parameter(ParameterSetName = 'Default')]
[Parameter(ParameterSetName = 'StartMode')]
[ValidateSet('Start', 'Stop', 'Restart', 'Pause', 'Resume', 'Interrogate')]
[System.String]$Action = 'Interrogate',
[Parameter(ParameterSetName = 'StartMode')]
[Parameter(ParameterSetName = 'Service')]
[Parameter(ParameterSetName = 'Default')]
[ValidateSet('Automatic', 'Manual', 'Disabled')]
[System.String]$AlterStartMode
)
Begin
{
}
Process
{
# Start Process Block
switch ($PsCmdlet.ParameterSetName)
{
"Default" {
Try
{
Write-Verbose "Attempting to gather Service(s) from $($ComputerName)"
$Services = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
Write-Verbose "Gather Service(s) from $($ComputerName)"
}
Catch [System.UnauthorizedAccessException]
{
Write-Verbose "Access Denied - Could not connect to $($ComputerName) via WMI"
Write-Error -Message 'Access Denied - Could not connect via WMI'
}
Catch [Exception]
{
Switch -regex ($Error[0])
{
"The RPC server is unavailable" { Write-Verbose "Connection Issue - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Connection Issue - Could not connect via WMI' }
Default { Write-Verbose "Unknown Error - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Unknown Error - Could not connect via WMI' }
}
}
Write-Verbose "Building Output Object"
foreach ($a in $Services)
{
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $a.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $a.Name
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceDescription" -Value $a.Description
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $a.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $a.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $a.StartMode
if ($StartMode -eq "All")
{
Write-Output $Obj
}
elseif ($StartMode -eq "Auto")
{
$Obj = $Obj | Where-Object -Property StartMode -EQ "Auto"
Write-Output $Obj
}
elseif ($StartMode -eq "AutoNotRunning")
{
$Obj = $Obj | Where-Object { ($_.StartMode -EQ "Auto") -and ($_.State -notlike "Running") }
Write-Output $Obj
}
elseif ($StartMode -eq "Manual")
{
$Obj = $Obj | Where-Object -Property StartMode -EQ "Manual"
Write-Output $Obj
}
}
}
"Service" {
Try
{
Write-Verbose "Attempting to verify Service name from $($ComputerName)"
$Services = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Services = $Services | Where-Object -Property Name -like $ServiceName
switch ($Action)
{
"Start" {
foreach ($b in $Services)
{
$Action = $b.StartService() | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "The error value $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Result"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
"Stop" {
foreach ($b in $Services)
{
$Action = $b.StopService() | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "The error value $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Result"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
"Restart" {
foreach ($b in $Services)
{
$Action = $b.StopService() | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "The error value $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Result"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
Write-Output "Restarting Service $ServiceName"
$Action = $b.StartService() | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "The error value $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Result"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
"Pause" {
foreach ($b in $Services)
{
$Action = $b.PauseService() | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "The error value $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Result"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
"Resume" {
foreach ($b in $Services)
{
$Action = $b.ResumeService() | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "The error value $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Result"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
"Interrogate" {
foreach ($b in $Services)
{
$Action = $b.InterrogateService() | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "The error value $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Result"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
Default { }
}
}
Catch [System.UnauthorizedAccessException]
{
Write-Verbose "Access Denied - Could not connect to $($ComputerName) via WMI"
Write-Error -Message 'Access Denied - Could not connect via WMI'
$Result = "Failed"
}
Catch [Exception]
{
Switch -regex ($Error[0])
{
"The RPC server is unavailable" { Write-Verbose "Connection Issue - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Connection Issue - Could not connect via WMI' }
Default { Write-Verbose "Unknown Error - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Unknown Error - Could not connect via WMI' }
}
$Result = "Failed"
}
}
"Summary" {
Try
{
Write-Verbose "Attempting to gather Service(s) from $($ComputerName)"
$Services = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
Write-Verbose "Gather Service(s) from $($ComputerName)"
}
Catch [System.UnauthorizedAccessException]
{
Write-Verbose "Access Denied - Could not connect to $($ComputerName) via WMI"
Write-Error -Message 'Access Denied - Could not connect via WMI'
}
Catch [Exception]
{
Switch -regex ($Error[0])
{
"The RPC server is unavailable" { Write-Verbose "Connection Issue - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Connection Issue - Could not connect via WMI' }
Default { Write-Verbose "Unknown Error - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Unknown Error - Could not connect via WMI' }
}
}
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $Services[0].PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "TotalServicesCount" -Value $Services.Count
$Obj | Add-Member -MemberType NoteProperty -Name "AutoStartCount" -Value ($Services | Where-Object -Property StartMode -EQ Auto).count
$Obj | Add-Member -MemberType NoteProperty -Name "AutoStartButNotRunningCount" -Value ($Services | Where-Object { ($_.StartMode -EQ "Auto") -and ($_.State -notlike "Running") }).count
Write-Output $Obj
}
"StartMode" {
Try
{
Write-Verbose "Attempting to verify Service name from $($ComputerName)"
$Services = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Services = $Services | Where-Object -Property Name -like $ServiceName
switch ($AlterStartMode)
{
"Automatic" {
foreach ($b in $Services)
{
$Action = $b.ChangeStartMode("$AlterStartMode") | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "Error $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Results"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
"Disabled" {
foreach ($b in $Services)
{
$b.ChangeStartMode("$AlterStartMode") | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "Error $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Results"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
"Manual" {
foreach ($b in $Services)
{
$b.ChangeStartMode("$AlterStartMode") | Out-Null
$Service = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName -ErrorAction Stop
$Results = (if $Action.returnvalue -eq 0 { "Succsess" } else { "Error $($Action.returnvalue) was reported" })
$b = $Service | Where-Object -Property Name -EQ $b.Name
Write-Verbose "Verified service name from $($ComputerName)"
$Obj = New-Object -TypeName System.Management.Automation.PSObject
$Obj | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $b.PSComputerName
$Obj | Add-Member -MemberType NoteProperty -Name "ServiceName" -Value $b.Name
$Obj | Add-Member -MemberType NoteProperty -Name "Action" -Value "$Action"
$Obj | Add-Member -MemberType NoteProperty -Name "Result" -Value "$Results"
$Obj | Add-Member -MemberType NoteProperty -Name "Status" -Value $b.Status
$Obj | Add-Member -MemberType NoteProperty -Name "State" -Value $b.State
$Obj | Add-Member -MemberType NoteProperty -Name "StartMode" -Value $b.StartMode
Write-Output $Obj
}
}
Default { }
}
}
Catch [System.UnauthorizedAccessException]
{
Write-Verbose "Access Denied - Could not connect to $($ComputerName) via WMI"
Write-Error -Message 'Access Denied - Could not connect via WMI'
$Result = "Failed"
}
Catch [Exception]
{
Switch -regex ($Error[0])
{
"The RPC server is unavailable" { Write-Verbose "Connection Issue - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Connection Issue - Could not connect via WMI' }
Default { Write-Verbose "Unknown Error - Could not connect to $($ComputerName) via WMI"; Write-Error -Message 'Unknown Error - Could not connect via WMI' }
}
$Result = "Failed"
}
}
}
} # End Process Block
End
{
}
}