2013-12-10 71 views
0

Okeys,我不知道什麼東西。它可能已經在某個地方了,但是我在解釋它時遇到了一些麻煩,所以我也在尋找它時遇到麻煩。Powershell通過CMD或VBS獲得FileVersion

事情並不複雜,只是對我而言不合邏輯。我試圖在Powershell中設置一個腳本,主要進入一個文件夾並獲取所有*.exe files的版本。這工作得很好這樣的:

dir 'C:\Program Files (x86)\SPN'| Get-ChildItem -Recurse -Include '*.exe' |%{$_.VersionInfo} | select FileName, FileVersion | Format-Table -Autosize | Out-file c:\test.txt 

這很簡單,因爲它是所有進入該文件夾,recursivly搜索的exe文件,取出VERSIONINFO,然後將其放入之前選擇的文件名和版本一個文件來報告安裝的版本。它也可以工作!

這個問題有點複雜。我們使用htm\vbs application來運行腳本。主要是這意味着我們所有的腳本是vbs, batch, or powershell都是通過這個平臺運行的。有時我們也會通過由vbs腳本啓動的批處理文件運行powershell。

當我啓動powershell並運行上面的腳本文件輸出與我以後的信息,當我啓動cmd並運行powershell腳本時,我得到的應用程序列表沒有版本。 vbs也一樣。

所以我想我會更深入。我開始了一個cmd,並輸入start powershell以獲得一個新窗口,但唉,我仍然只得到filenames and no versions!我得到這些版本的唯一方法是通過Powershell自行運行腳本。 (這意味着我必須手動打開Powershell,如右擊並選擇Run with Powershell給出名稱,並且沒有版本)

任何建議和想法都將受到歡迎。

謝謝。

+0

好吧,挖掘更深,我發現,它實際上是工作。 cmd的問題實際上是屏幕上沒有空間。添加「mode con:cols = 145」解決了這個問題。我還沒有嘗試用vbs解決它,但我想這可能是類似的東西。關閉案件。 - 猜測我無法關閉它;)無論如何,我找到了我的答案。 – SkyRaider

回答

0

如果先指定最寬的列,則可能不會顯示某些列,因此最先指定最小的數據元素是最安全的。在下面的例子中,我們首先指定了非常寬的路徑元素,即使包裝,我們仍然失去最後一列。

指定fileversion首先解決問題。

dir 'C:\.....| Get-ChildItem -Recurse -Include '*.exe' | %{$_.VersionInfo} | select FileName, FileVersion | Format-Table -Wrap -Autosize -Property fileversion, filename | Out-File "C:\....\testing.txt" 

http://technet.microsoft.com/en-us/library/dd347677.aspx