Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Powershell – If is not working (windows services checks)

I am trying to build my own script to check some Windows services (status and start mode) and I am facing an issue on the IF …
For example even if the service is "Running", it will never run the code inside the IF…

let me share my code below (I am a newbie on powershell so be gentle xD)

For info, I will do more actions inside the IF and ELSE, it is just for the example.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

# import computers list, 1 by line
$Computers = get-content .\computers.txt

# define variable of services we want to check
$ServiceNetbios = "netbt"

# define variable to ask credentials
$Cred = Get-Credential

# declare Function to open a session a remote computer
Function EndPSS { Get-PSSession | Remove-PSSession }

EndPSS

########################################################
#                   BEGINNING OF SCRIPT                #
#                         by xxx                       #
#                       2022-02-03                     #
########################################################


# loop for each computer imported from the file
foreach ($computer in $computers) {
    
    # show name of computer in progress
    $computer

    # connect remotely to the computer
    $session = New-PSSession -ComputerName $computer -Credential $Cred

    # check Netbios service
    $StatusServiceNetbios = Invoke-Command -Session $session -ScriptBlock { Get-Service -Name $Using:ServiceNetbios | select -property * }
    
    # Check Netbios service started or not
    write-host $StatusServiceNetbios.Status
    
    if ($StatusServiceNetbios.Status -eq 'Running')
        {
           Write-host "IF Running"
        }
    else
    {
        write-host "IF NOT Running"
    }
    
EndPSS

}

and what return my script :

computername
Running           (<= the variable $StatusServiceNetbios.Status )
IF NOT Running    (<= the ELSE action)

Thanks you in advance for your help,
this drive me crazy and maybe this is very simple…

>Solution :

This is probably because of the way powershell creates service objects – (Get-Service netbt).Status has a child property named Value:

$StatusServiceNetbios.Status

Value  
-----  
Running

# so Status is never -eq to 'Running':
$StatusServiceNetbios.Status -eq 'Running'
False

# use the Value property in your If statement instead:
$StatusServiceNetbios.Status.Value -eq 'Running'
True
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading