gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:40:16 25 4
gpt4 key购买 nike

我试图在几台服务器上使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com