2013-02-11 40 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

相关问题