我的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
感谢。
答案 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...
}
}