使用 powershell 检查访问的测试路径

使用 powershell 检查访问的测试路径

我正在尝试找出我的网络上谁安装了 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}
}

答案1

您没有测试正确的路径,因为它是在foreach定义循环之前分配的。这意味着您每次都$PCname在测试路径。\\\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}
}

答案2

虽然检查特定文件的方法在某些情况下可能有效,但它不能解释文件存在但未安装的情况;或者 Access 安装在不同的位置。

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

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

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

相关内容