Powershell通过CMD或VBS获取FileVersion

时间:2013-12-10 08:21:46

标签: powershell batch-file vbscript cmd

哎呀,我对某些东西不了解。它可能已经存在于某个地方了,但我在解释它时遇到了一些麻烦,所以我也很难找到它。

事情并不复杂,对我来说不合逻辑。我正在尝试在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

这很简单,因为它只是进入文件夹,递归搜索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给出名称,没有版本)

欢迎任何建议和想法。

感谢。

1 个答案:

答案 0 :(得分: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