0

我的 Powershell 脚本中有两个对象 -从 csv 文件导入的应用程序+计算机对象

# import applications

$apps = @()
$apps = Import-CSV C:\Working\fcheck_v2\apps.csv 

# import computer objects

$compobj = @()
$compobj = Import-CSV C:\Working\fcheck_v2\compobj.csv

apps.csv 的结构如下:

appname          location      lob
Core             C$\errlog.ini  RESEARCH    
Blmbg            C$\errlog.ini  RESEARCH    
Blmbg2           C$\errlog.ini  RESEARCH        
MLFR             C$\errlog.ini  LEGAL

compobj.csv 的结构如下:

hostname        lob
192.169.226.2   RESEARCH
192.169.226.5   HR

如何使用 testpath 检查计算机上是否存在特定应用程序?

例如,我想测试 RESEARCH lob 中的所有计算机对象是否在机器上安装了 RESEARCH 应用程序,并将结果打印在如下表中:

hostname        lob           core     blmbg     blmbg2     mlfr
192.169.226.2   RESEARCH      True     True      False      Frue
192.169.226.5   HR            True      N/A       N/A       N/A

如果机器通过Test-Path - 则状态设置为True

如果机器失败Test-Path + 需要安装应用程序(即它在 lob 中) - 然后状态设置为False

如果机器失败Test-Path + app 不需要安装(即它不在 lob 中) - 那么状态设置为N/A

谢谢。

4

1 回答 1

1

这里有一些粗略的伪代码,可以让你大部分时间得到你所要求的。它至少应该为您指明正确的方向。重新阅读您的问题,重新排序循环可能更有意义,并且肯定有一些优化空间。

# foreach computer in compobj.csv
foreach $computer in $compobj
{
  # get the computers lob
  $computerLob = $computer.lob

  $lobApps = $apps | ? { $_.lob -eq $computerLob }

  foreach $app in $lobApps
  {
    # you will need to deal with authentication here 
    $result = Invoke-Command -ComputerName $computer.hostname -Script { if (Test-Path $app.location) { return "True" } else { return "False" } }

    # Write out suitable output... 
  }
}
于 2013-10-27T19:13:19.577 回答