2013-12-10 38 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