powershell - 从远程计算机获取Powershell中.dll的文件版本

标签 powershell powershell-2.0 powershell-remoting

我试图在几台服务器上使用Powershell远程获取dll的文件版本,并将服务器名称,dll版本和dll文件位置写入到csv或html报告中。问题是某些服务器是Win 2003和Win2008。因此文件可能位于例如C:\ Program Files \ WinZip \ WZCAB.DLL或C:\ Program Files(x86)\ WinZip \ WZCAB.DLL。该脚本将检查一个位置,如果不存在,它将检查另一个位置,然后将其写出。谁能帮我吗?

仅此几件事-该脚本将用于访问200多个服务器或2003和2008年的VM。在2003年,它需要Powershell 2.0和2008年,因此可以及时启用远程处理。我当时在想也许我需要利用WMI。我还有另外两个利用WMI来获取补丁和重新启动时间的脚本。我确实尝试过Ravikanth脚本(再次感谢您),并在传递服务器的txt文件时收到以下错误-一台或多台计算机名称无效。如果尝试传递Uri,请使用-Co​​nnectionUri参数或传递Uri对象而不是字符串。同样,由于我将不会在每台服务器上启用远程处理,因此还有另一种方法吗?我修改了Ravikanth脚本(如下)并在本地尝试过,效果很好。当我远程尝试时,它不会。有什么想法吗?

$servers = "D:\scripts\winzip\servers.txt" 
$x86Path = 'C:\Program Files (x86)\WinZip\WZCAB.DLL'
$x64Path = 'C:\Program Files\WinZip\WZCAB.DLL'

    foreach ($computername in $servers){
        if (Test-Path $x86Path) {
            (Get-Item $x86Path | Select -ExpandProperty VersionInfo).FileVersion
        } elseif (Test-Path $x64Path) {
            (Get-Item $x64Path | Select -ExpandProperty VersionInfo).FileVersion           
        }
    }

最佳答案

如果您在这些计算机上启用了远程处理:

$servers = 'server1','server2'
$x86Path = 'C:\Program Files (x86)\WinZip\WZCAB.DLL'
$x64Path = 'C:\Program Files\WinZip\WZCAB.DLL'
Invoke-Command $servers {
    Param ($x86Path, $x64Path)
    if (Test-Path $x86Path) {
        (Get-Item $x86Path | Select -ExpandProperty VersionInfo).FileVersion
    } elseif (Test-Path $x64Path) {
        (Get-Item $x64Path | Select -ExpandProperty VersionInfo).FileVersion           
    }
} -ArgumentList $x86Path,$x64Path

这是WMI的方法:
$servers = @(Get-Content C:\servers.txt) 
$servers | % { Get-WMIObject -ComputerName $_ -Query "SELECT * FROM CIM_DataFile WHERE Drive ='C:' AND Path='\\Program Files (x86)\\WinZip\\' AND FileName='WZCAB' AND Extension='dll'" } | select Version

这只是您所需的一部分。您需要放置一个try-catch块,以确保在该路径下找不到文件的情况下处理错误。我将其留给您进行研发。

关于powershell - 从远程计算机获取Powershell中.dll的文件版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424530/

相关文章:

powershell - VisualSVN Server PowerShell配置

powershell - 查明安全帐户管理器 (SAM) 名称是用户还是组

error-handling - Powershell : is there a limit to the number of output file types I can have?

powershell - 是否可以通过 Powershell 远程处理以 "nt authority\system"启动进程?

跨版本的 PowerShell 安装文件夹和脚本文件扩展名

windows - 无法在 Windows 10 LTSC 上安装 winget-cli

java - 从远程服务器的 PowerShell 获取 Java 版本

powershell - 为什么 Windows 远程管理服务坚持为 "delayed start"?

powershell - 通过Start-Job调用功能时如何解决错误?

powershell - 在PowerShell脚本中处理命令提示符错误