2013-08-09 10 views
8

Powershell'de yeniyim ve bir dosya olup olmadığını kontrol eden bir komut dosyası yazmaya çalışıyorum; eğer varsa, bir işlemin çalışıp çalışmadığını kontrol eder. Bunu yazmanın daha iyi yolları olduğunu biliyorum, ama lütfen bana bir fikir verebilir mi?Uzak bilgisayar listesinde bir dosya olup olmadığını kontrol etmek için Powershell komut dosyası

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 

Herhangi bir yardım: Süreç çalışıyorsa kontrol ederken, dosya varsa

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

ilk bölümü (kontrol hiçbir sorun ile çalışır Ama bir istisna var: İşte ne var. mutluluk duyacağız!

cevap

18

eşitlik karşılaştırma operatörü -eq değil eq olduğunu. boole değeri "true" PowerShell içinde $true olduğunu. Vesonucunu karşılaştırmak istiyorsanız, yaptığınız gibi, bir alt ifadede cmdlet'i çalıştırmanız gerekir, aksi takdirde -eq "True", cmdlet'e "True" argümanı ile eq ek seçeneği olarak değerlendirilir.

Değişim bu: bu işe

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

:

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

Merhaba Ansgar:

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

Veya (daha iyisi), zaten bir boolean değer döndürür Test-Path beri sadece bunu , çok teşekkürler!! Ancak, işlemin hangi makinede çalıştığını göstermiyor. Çıktı, sadece makinelerin aradığım dosyayı bulduğu bir listedir. Ancak, dosya varsa, bir işlemin çalışıp çalışmadığını da bilmem gerekir. Bunu yapmanın bir yolu var mı? Yine, zaman ayırdığın için teşekkürler. –

+0

'Nesne Seç 'normalde bir boru hattından okur. Bir döngü içinde kullanırsanız, bunu '-InputObject' özelliği üzerinden beslemeniz gerekir:' Nesne Seç -InputObject $ _ @ {Name = ...} '. –

İlgili konular