আমি "-ErrorAction SilentlyContinue" সমাধানটি ব্যবহার করেছি তবে পরে এটি সেই সমস্যাটিতে চলে গেল যা এটির পিছনে একটি ত্রুটি-রেকর্ড ছেড়ে যায়। সুতরাং "গেট-পরিষেবা" ব্যবহার করে পরিষেবাটি বিদ্যমান কিনা তা খতিয়ে দেখার আরও একটি সমাধান এখানে।
# 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
তবে রাভিকান্তের সেরা সমাধান রয়েছে যেহেতু পরিষেবাটি উপস্থিত না থাকলে গেট-ডাব্লুআইএমবজেক্ট কোনও ত্রুটি ফেলবে না। সুতরাং আমি ব্যবহার করে স্থির হয়েছি:
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
}