Сценарий 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")