文件位置因计算机和空间问题而异

时间:2013-02-11 13:10:57

标签: powershell powershell-v2.0

我有以下代码,目前正在检查计算机的版本信息和服务状态。

我遇到的问题是服务器在不同的地方找到了.exe:

  1. C:\ program files \ snare \ snarecore.exe
  2. C:\ program files(x86)\ snare \ snarecore.exe
  3. d:\应用\圈套\ snarecore.exe
  4. 如何让下面的脚本运行正确的版本?我想我可以使用服务检查的路径?我正在完成所有远程操作并拥有服务器的权限并且工作正常 - 但我不得不根据可执行文件所在的所有三个位置制作三个(或更多!)脚本!

    另外,对于名称中有空格的那些(../program file ..)我在哪里放置引号,以便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
        }
    }
    

    谢谢,

3 个答案:

答案 0 :(得分:1)

显而易见的解决方案是使用路径变量,依次为三个不同路径中的每个路径分配该变量,并使用该变量将实际检查写为函数。

答案 1 :(得分:1)

您可以检查服务的pathname属性以获取exe位置:

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

答案 2 :(得分:1)

您可以使用反引号转义双引号:

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