2013-08-09 29 views
8

私はPowershellで新しく、ファイルが存在するかどうかをチェックするスクリプトを作成しようとしています。存在する場合は、プロセスが実行中かどうかをチェックします。 これを書くにはより良い方法があると知っていますが、誰でも私にアイデアを教えてください。リモートコンピュータリストにファイルが存在するかどうかを確認するPowershellスクリプト

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 

任意の助けを:プロセスが実行されているかどうかをチェックする際に、ファイルが存在する場合

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

最初の部分を(チェック問題なく動作します。しかし、私は例外を持っている: ここで私が持っているものです。いただければ幸いです!

答えて

18

等価比較演算子は-eq、ないeqです。ブール値を「true」にPowerShellでは$trueである。そして、あなたはの結果を比較したい場合はを使用する場合は、サブ式でコマンドレットを実行する必要があります。そうでない場合は、と追加のオプションとして扱われます。"True"がコマンドレットに割り当てられます。

変更この:この中

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

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

こんにちはアンスガー:

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

または、(いっそ)、すでにブール値を返しますTest-Pathいるので、単純にこれを行います、 どうもありがとう!! しかし、プロセスが実行されているマシンは表示されません。 私の出力は、私が探しているファイルがどのマシンから得られたかの一覧です。しかし、ファイルがある場合は、プロセスが実行中であるかどうかを知る必要があります。それを行う方法はありますか? もう一度、ありがとうございます。 –

+0

'Select-Object'は通常、パイプラインから読み込みます。ループ内で使用する場合は、 '-InputObject'プロパティを使ってフィードを送る必要があります:' Select-Object -InputObject $ _ @ {Name = ...} '。 –

関連する問題