PowerShell: ¿Es posible determinar el tipo MIME de un archivo?
Frecuentes
Visto 15,282 equipos
8
¿Es posible que PowerShell determine cuál es el tipo de archivo dado? Por ejemplo, si le paso un camino de C:\Foo.zip
, ¿puedo hacer que determine que el archivo en esa ruta es, de hecho, un archivo zip y no otra cosa?
4 Respuestas
7
PowerShell, como el resto del sistema operativo Windows, simplemente adivina el tipo de archivo en función de la extensión.
Sin embargo, existen programas de adivinación de tipos de archivos de terceros, que realmente analizan el contenido del archivo.
Hay un respuesta verdaderamente excelente a esta pregunta en SuperUser. Las principales recomendaciones incluyen Archivo para Windows y TRIDATA.
respondido 20 mar '17, 10:03
8
Si tiene .NET 4.5+, puede usar 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
El crédito va a esta respuesta a una pregunta similar sobre .NET.
Editar: malinterpretar la pregunta. GetMimeMapping
devuelve el tipo MIME por extensión, no analiza los contenidos.
contestado el 23 de mayo de 17 a las 13:05
1
$ext = ".exe"
$null = New-PSDrive HKCR Registry HKEY_CLASSES_ROOT -ea 0
$mime = (gp HKCR:$ext)."Content Type"
write-host $ext $mime
Respondido el 09 de Septiembre de 17 a las 17:09
Explique su respuesta (díganos qué el problema es y cómo este código soluciona ese problema). Las respuestas de solo código son menos educativas y de uso limitado. - erik a
Debería dar más contexto/explicación para el código, especialmente porque ya hay varias respuestas de alta calidad. Por favor lea el sitio laguna al igual que Cómo responder. - EJoshuaS - Apoya a Ucrania
3
Puede obtener los tipos mime del registro. Desafortunadamente, el subárbol HKEY_CURRENT_USER no se mapea automáticamente como una unidad, por lo que primero deberá verificarlo.
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;
}
Aquí hay un ejemplo de uso
PS> Get-MimeType -extension .zip
application/x-zip-compressed
Joe
Respondido 24 Oct 12, 17:10
En realidad, esto 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. - Ro Yo Mi
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas .net powershell or haz tu propia pregunta.
Desafortunadamente, esto ya no parece ser compatible con PowerShell 6. - Florian Feldhaus