Сценарий Powershell для проверки наличия файла в списке удаленных компьютеров

Я новичок в Powershell, и я пытаюсь написать сценарий, который проверяет, существует ли файл; если это так, он проверяет, запущен ли процесс. Я знаю, что есть гораздо лучшие способы написать это, но может ли кто-нибудь дать мне идею? Вот что у меня есть:

Get-Content C:tempSvcHostsMaquinasEstag.txt | `
   Select-Object @{Name='ComputerName';Expression={$_}},@{Name='SvcHosts Installed';Expression={ Test-Path "$_c$Windowssvchosts"}} 

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

первая часть (проверьте, существует ли файл, работает без проблем. Но у меня есть исключение при проверке, запущен ли процесс:

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

любая помощь будет оценили!

1 ответов


оператор сравнения равенства -eq, а не eq. Логическое значение "true" в PowerShell -$true. И если вы хотите сравнить результат Test-Path для чего-то так, как вы это делаете, вы должны запустить командлет в подвыражении, иначе -eq "True" будет рассматриваться как дополнительный параметр eq С аргументом "True" командлету.

изменить это:

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

в:

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

или (еще лучше), поскольку Test-Path уже возвращает логическое значение, просто сделайте это:

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