file varios Obtener la versión del archivo en PowerShell




renombrar varios archivos powershell (8)

¿Cómo puede obtener la información de la versión de un archivo .dll o .exe en PowerShell?

Estoy específicamente interesado en la File Version , aunque también sería útil otra información de la versión (es decir, Company , Language , Product Name , etc.).


Dado que PowerShell puede llamar a clases .NET , puede hacer lo siguiente:

[System.Diagnostics.FileVersionInfo]::GetVersionInfo("somefilepath").FileVersion

O como se indica aquí en una lista de archivos:

get-childitem * -include *.dll,*.exe | foreach-object { "{0}`t{1}" -f $_.Name, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }

O incluso mejor como script: http://jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!125.entry


Encuentro esto útil:

function Get-Version($filePath)
{
   $name = @{Name="Name";Expression= {split-path -leaf $_.FileName}}
   $path = @{Name="Path";Expression= {split-path $_.FileName}}
   dir -recurse -path $filePath | % { if ($_.Name -match "(.*dll|.*exe)$") {$_.VersionInfo}} | select FileVersion, $name, $path
}

Como dijo EBGreen, [System.Diagnostics.FileVersionInfo] :: GetVersionInfo (ruta) funcionará, pero recuerde que también puede obtener todos los miembros de FileVersionInfo, por ejemplo:

[System.Diagnostics.FileVersionInfo]::GetVersionInfo(path).CompanyName

Debería poder usar todos los miembros de FileVersionInfo documentados aquí, lo que básicamente le proporcionará todo lo que pueda desear sobre el archivo.


Prefiero instalar las extensiones de comunidad de PowerShell y simplemente uso la función Get-FileVersionInfo que proporciona.

Al igual que:

Get-FileVersionInfo MyAssembly.dll

con salida como:

ProductVersion   FileVersion      FileName
--------------   -----------      --------
1.0.2907.18095   1.0.2907.18095   C:\Path\To\MyAssembly.dll

Lo he usado contra un directorio completo de ensamblajes con gran éxito.


Otra forma de hacerlo es usar la técnica de acceso a archivos incorporada:

(get-item .\filename.exe).VersionInfo | FL

También puede obtener cualquier propiedad particular de VersionInfo, por lo tanto:

(get-item .\filename.exe).VersionInfo.FileVersion

Esto es bastante cercano a la técnica dir.


Aquí un método alternativo. Utiliza Get-WmiObject CIM_DATAFILE para seleccionar la versión.

(Get-WmiObject -Class CIM_DataFile -Filter "Name='C:\\Windows\\explorer.exe'" | Select-Object Version).Version

Esto se basa en las otras respuestas, pero es exactamente lo que estaba buscando:

(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersion

[System.Diagnostics.FileVersionInfo]::GetVersionInfo("Path\To\File.dll")




versioninfo