2012-07-28 96 views

回答

3

您可以從註冊表中獲取mime類型。不幸的是,HKEY_CURRENT_USER配置單元未被自動映射爲驅動器,因此您必須首先進行檢查。

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; 
} 

下面是一個例子使用

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

-Joe

+3

這實際上並不測試目標文件的內容,它只是讀取擴展並從操作系統查找文件類型關係。 – 2014-03-27 20:53:05

3

如果你有.NET 4.5 +,你可以使用靜態方法System.Web.MimeMapping.GetMimeMapping

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

幸得this answer有關.NET的類似問題。


編輯:錯誤的問題。 GetMimeMapping通過擴展名返回MIME類型,它不分析內容。

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

請詳細說明您的答案(告訴我們問題是什麼,以及如何通過此代碼修復此問題)。純代碼答案教育程度較低,使用有限。 – 2017-09-09 16:57:10

+1

您應該爲代碼提供更多的上下文/解釋,特別是因爲已經有幾個高質量的答案。請閱讀網站[旅遊]以及[答案]。 – EJoshuaS 2017-09-09 22:37:54