2013-02-11 64 views
0

我有下面的代碼,目前檢查計算機的版本信息和服務狀態。計算機和空間問題上的文件位置不同

我的問題是,服務器在不同的地方位於的.exe:

  1. C:\ Program Files文件\圈套\ snarecore.exe
  2. C:\ Program Files文件(x86)的\圈套\ snarecore.exe
  3. d:\ APPS \圈套\ snarecore.exe

如何獲得下面的腳本運行正確的版本?我想我可以使用服務正在檢查的路徑?我這樣做是完全遙不可及的,並且對服務器有權利並且工作正常 - 但是我不得不根據可執行文件的所有三個位置製作三個(或更多!)腳本!

另外,對於名稱中有空格的文件(../程序文件..),我在哪裏放置引號以便PowerShell可以讀取整行並且不會由於名稱中的空間而出錯?

CODE:

clear 
$ErrorActionPreference = "silentlycontinue" 

$Logfile = "C:\temp\output_cdrive.log" 

Function LogWrite 
{ 
    param([string]$logstring) 

    Add-Content $Logfile -Value $logstring 
} 

$computer = Get-Content -Path c:\temp\servers2.txt 

foreach ($computer1 in $computer){ 

$Service = Get-WmiObject Win32_Service -Filter "Name = 'Snare'" -ComputerName $computer1 

    if (test-connection $computer1 -quiet) 
    { 
     $version = (Get-Command ""\\$computer1\c$\Program Files (x86)\Snare\SnareCore.exe"").FileVersionInfo.FileVersion 

      if($Service.state -eq 'Running') 
      { 
       LogWrite "$computer1 STARTED $version" 
      } 
      else 
      { 
       LogWrite "$computer1 STOPPED $version" 
      } 
    } 
    else 
    { 
     LogWrite "$computer1 is down" -foregroundcolor RED 
    } 
} 

謝謝,

回答

1

可以檢查服務的路徑屬性來獲取EXE位置:

PS>(Get-WmiObject Win32_Service -Filter "name='spooler'").pathname 
C:\Windows\System32\spoolsv.exe 
+0

這似乎工作正常 - 但它不會做那些有一個空間的路徑名....任何想法我如何讓代碼與路徑名中的名稱一起執行? – lara400 2013-02-11 14:38:57

+0

究竟是什麼問題?只是使用引號(「)之間的路徑,這應該工作 – 2013-02-11 14:50:05

+0

詹姆斯回答了它 - 我用的報價,但它不工作 - 問題是我需要三個不同的報價! – lara400 2013-02-11 15:15:27

1

顯而易見的解決方案是使用使用一個路徑變量,分配該變量中的每個依次三種不同的路徑,和寫入實際檢查作爲函數那個變量。

+0

聽起來像是個好主意......但我不知道從哪裏開始...我會嘗試並實施它無論如何.. – lara400 2013-02-11 14:39:27

1

可以逃脫使用反引號雙引號:

"`"\\$computer1\c$\Program Files (x86)\Snare\SnareCore.exe`"" 
+0

非常感謝 - 正是我所需要的! – lara400 2013-02-11 15:15:49

相關問題