2011-12-08 26 views
1

我試圖讓遠程使用PowerShell多個服務器上的一個DLL的文件版本,並有寫服務器名稱,DLL版本,並以CSV或HTML dll文件位置報告。有些服務器是Win 2003和Win 2008.因此,該文件可能駐留在例如C:\ Program Files \ WinZip \ WZCAB.DLL或C:\ Program Files(x86)\ WinZip \ WZCAB.DLL中。該腳本會檢查一個位置,如果它不存在,它會檢查另一個位置,然後寫出來。誰能幫我嗎?得到的.dll文件版本

只是幾件事 - 該腳本將被用來訪問200多個服務器或虛擬機的2003年和2008年。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   
     } 
    } 
+0

感謝的快速反應.. – user1086732

+0

你的代碼並沒有真正獲得任何遠程服務器。實際上,您甚至不會通過該集合進行迭代,因爲您正在將servers.txt內容作爲數組讀取。有一種使用CIM_DataFile WMI Class的WMI方法。 – ravikanth

回答

0

使用Test-Path cmdlet查看路徑是否存在。如果不使用備用路徑。

而且在Program Files文件路徑的差異不會贏得2003或2008,但是從操作系統是否是32位或64位和應用程序有32位或64位的支持出現。

5

如果您遠程在這些計算機上啓用:

$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塊來確保您處理錯誤,以防在該路徑中找不到該文件。我將離開這個可以供大家& D.

+0

當OP沒有顯示他嘗試過的東西時,避免給出確切的代碼。正如你可能知道的那樣,這不是一個能夠得到任何想要的代碼的地方。 – manojlds

+2

不明白爲什麼不在這種情況下。這很瑣碎 –

+0

爲什麼不呢?恕我直言,向初學者提供幫助並沒有什麼壞處。 – ravikanth

相關問題