9

我是 Powershell 的新手,我正在尝试编写一个脚本来检查文件是否存在;如果是,它会检查进程是否正在运行。我知道有更好的方法来写这个,但是谁能给我一个想法?这是我所拥有的:

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}} 
   }

第一部分(检查文件是否存在,运行没有问题。但是在检查进程是否正在运行时出现异常:

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

任何帮助,将不胜感激!

4

1 回答 1

20

相等比较运算符是-eq,不是eq。PowerShell 中的布尔值“true”是$true. 如果您想以您Test-Path的方式将结果与某事进行比较,则必须在子表达式中运行 cmdlet,否则-eq "True"将被视为eq带有 cmdlet 参数的附加选项"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")
于 2013-08-09T20:47:16.877 回答