2012-07-28 22 views

Respuesta

4

PowerShell, como el resto del sistema operativo Windows, simplemente adivina el tipo de archivo basado en la extensión.

Sin embargo, existen programas de adivinadores de tipo de archivo de terceros, que realmente miran el contenido del archivo.

Hay un truly excellent answer to this question over on SuperUser. Las mejores recomendaciones incluyen File for Windows y TrID.

+0

Eso funciona. ¡Gracias! – Nick

3

Puede obtener los tipos de mimo del registro. Desafortunadamente, la colmena HKEY_CURRENT_USER no está asignada automáticamente como unidad de disco, por lo que tendrá que verificarla primero.

function Get-MimeType() 
{ 
    param($extension = $null); 
    $mimeType = $null; 
    if ($null -ne $extension) 
    { 
    $drive = Get-PSDrive HKCR -ErrorAction SilentlyContinue; 
    if ($null -eq $drive) 
    { 
     $drive = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT 
    } 
    $mimeType = (Get-ItemProperty HKCR:$extension)."Content Type"; 
    } 
    $mimeType; 
} 

He aquí un ejemplo de uso

PS> Get-MimeType -extension .zip 
application/x-zip-compressed 

-Joe

+3

Esto en realidad no prueba el contenido del archivo de destino, simplemente lee la extensión y busca la relación de tipo de archivo del sistema operativo. –

3

Si tiene .NET 4.5+, puede utilizar el método estático System.Web.MimeMapping.GetMimeMapping:

> Add-Type -AssemblyName "System.Web" 
> [System.Web.MimeMapping]::GetMimeMapping("C:\foo.zip") 
application/x-zip-compressed 

crédito va a this answer a una pregunta similar sobre .NET.


Editar: Lo leí mal. GetMimeMapping devuelve el tipo MIME por extensión, no analiza el contenido.

0
$ext = ".exe" 
$null = New-PSDrive HKCR Registry HKEY_CLASSES_ROOT -ea 0 
$mime = (gp HKCR:$ext)."Content Type" 
write-host $ext $mime 
+2

Por favor, amplíe su respuesta (díganos _qué_ es el problema, y ​​_cómo_ este código corrige ese problema). Las respuestas de solo código son menos educativas y de uso limitado. –

+1

Debe dar más contexto/explicación para el código, especialmente porque ya hay varias respuestas de alta calidad. Por favor, lea el sitio [recorrido], así como [respuesta]. – EJoshuaS

Cuestiones relacionadas