मैंने "-ErrorAction SilentlyContinue" समाधान का उपयोग किया लेकिन फिर बाद में इस समस्या में भाग गया कि यह एक ErrorRord को पीछे छोड़ देता है। तो यहाँ केवल जाँच के लिए एक और समाधान है कि क्या सेवा "गेट-सर्विस" का उपयोग कर रही है।
# Determines if a Service exists with a name as defined in $ServiceName.
# Returns a boolean $True or $False.
Function ServiceExists([string] $ServiceName) {
[bool] $Return = $False
# If you use just "Get-Service $ServiceName", it will return an error if
# the service didn't exist. Trick Get-Service to return an array of
# Services, but only if the name exactly matches the $ServiceName.
# This way you can test if the array is emply.
if ( Get-Service "$ServiceName*" -Include $ServiceName ) {
$Return = $True
}
Return $Return
}
[bool] $thisServiceExists = ServiceExists "A Service Name"
$thisServiceExists
लेकिन रविकांत के पास सबसे अच्छा समाधान है क्योंकि Get-WmiObject एक त्रुटि नहीं फेंकेगा यदि सेवा मौजूद नहीं थी। इसलिए मैं उपयोग करने पर बस गया:
Function ServiceExists([string] $ServiceName) {
[bool] $Return = $False
if ( Get-WmiObject -Class Win32_Service -Filter "Name='$ServiceName'" ) {
$Return = $True
}
Return $Return
}
तो एक और अधिक पूर्ण समाधान की पेशकश करने के लिए:
# Deletes a Service with a name as defined in $ServiceName.
# Returns a boolean $True or $False. $True if the Service didn't exist or was
# successfully deleted after execution.
Function DeleteService([string] $ServiceName) {
[bool] $Return = $False
$Service = Get-WmiObject -Class Win32_Service -Filter "Name='$ServiceName'"
if ( $Service ) {
$Service.Delete()
if ( -Not ( ServiceExists $ServiceName ) ) {
$Return = $True
}
} else {
$Return = $True
}
Return $Return
}