使用PowerShell进行访问的testingpath检查

我试图找出谁在我的networking上安装了Access。 我有几个问题让列表正常工作,所以我使用了输出txt文件。 无论如何,即使这不是一个很好的方法来做到这一点,它仍然应该工作。 谁能告诉我为什么这不起作用?

$Computers = Get-QADComputer | select name | Out-File "c:\access_search.txt" $Computers = Get-Content "c:\access_search.txt" $Path = "\c$\Program Files\Microsoft Office\Office12\Access.pip" $AccessPath = "\\" + $PCName + $Path Foreach ($PCname in $Computers){ $Result = Test-Path $AccessPath if ($Result -eq "True") {$Pcname} } 

你没有testing正确的path,因为它是在定义$PCnameforeach循环之前分配的。 这意味着您每次都在testingpath\\\c$\Program Files\Microsoft Office\Office12\Access.pip

尝试这个:

 $Computers = Get-QADComputer | select name | Out-File "c:\access_search.txt" $Computers = Get-Content "c:\access_search.txt" $Path = "\c$\Program Files\Microsoft Office\Office12\Access.pip" Foreach ($PCname in $Computers){ $AccessPath = "\\" + $PCName + $Path $Result = Test-Path $AccessPath if ($Result -eq "True") {$Pcname} } 

虽然在某些情况下检查特定文件的方法可能会起作用,但它并不考虑文件是否存在,但未安装; 或访问正在安装,但在不同的位置。

为了避免这两个WMI可以使用(包括远程)直接读取MSI数据。

 gwmi -comp ComputerNameGoesHere WIn32_SoftwareFeature -filter "name like 'access%' and productname like 'microsoft%'" | fl Name,ProductName,Version,Vendor 

Access(2010,一次x64,作为Office Professional Plus的一部分,一次x64)的两台计算机上的每台计算机上都返回了多个结果,没有安装Office的系统上没有结果。 筛选规则可能需要针对独立的Access安装或更早版本进行调整。