Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell script to check if a file exists on remote computer list

Tags:

powershell

I'm new at Powershell, and I'm trying to write a script that checks if a file exists; if it does, it checks if a process is running. I know there are much better ways to write this, but can anyone please give me an idea? Here's what I have:

Get-Content C:\temp\SvcHosts\MaquinasEstag.txt | `
   Select-Object @{Name='ComputerName';Expression={$_}},@{Name='SvcHosts Installed';Expression={ Test-Path "\\$_\c$\Windows\svchosts"}} 

   if(Test-Path "\\$_\c$\Windows\svchosts" eq "True")
   {
        Get-Content C:\temp\SvcHosts\MaquinasEstag.txt | `
        Select-Object @{Name='ComputerName';Expression={$_}},@{Name='SvcHosts Running';Expression={ Get-Process svchosts}} 
   }

The first part (check if the file exists, runs with no problem. But I have an exception when checking if the process is running:

Test-Path : A positional parameter cannot be found that accepts argument 'eq'.
At C:\temp\SvcHosts\TestPath Remote Computer.ps1:4 char:7
+    if(Test-Path "\\$_\c$\Windows\svchosts" eq "True")
+       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Test-Path], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.TestPathCommand

Any help would be appreciated!

like image 347
Bianca Borges Avatar asked Aug 09 '13 20:08

Bianca Borges


1 Answers

The equality comparison operator is -eq, not eq. The boolean value "true" in PowerShell is $true. And if you want to compare the result of Test-Path to something the way you do, you must run the cmdlet in a subexpression, otherwise -eq "True" would be treated as an additional option eq with the argument "True" to the cmdlet.

Change this:

if(Test-Path "\\$_\c$\Windows\svchosts" eq "True")

into this:

if ( (Test-Path "\\$_\c$\Windows\svchosts") -eq $true )

Or (better yet), since Test-Path already returns a boolean value, simply do this:

if (Test-Path "\\$_\c$\Windows\svchosts")
like image 150
Ansgar Wiechers Avatar answered Oct 02 '22 10:10

Ansgar Wiechers