Powershell - 来自两个不同对象的测试路径

时间:2013-10-27 18:57:17

标签: powershell csv

我的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检查计算机上是否存在特定的应用程序?

例如,我想测试一下,研究中的所有计算机对象都在机器上安装了研究应用程序,并将结果打印在如下表格中:

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 + app(即它在吊球中) - 那么状态设置为 False

如果机器发生故障 Test-Path + app不需要安装(即它不在吊顶中) - 那么状态设置为 N / A

感谢。

1 个答案:

答案 0 :(得分: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... 
  }
}