2010-06-02 69 views
2

我希望能夠複製這一ADSUTIL.VBS在PowerShell中的行爲:如何使用POWERSHELL在IIS6網站中設置MimeTypes?

cscript adsutil.vbs set W3SVC/$(ProjectWebSiteIdentifier)/MimeMap 
                 ".pdf,application/pdf" 

而且據我已經得到越來越爲網站對象:

$website = gwmi -namespace "root\MicrosoftIISv2" -class "IISWebServerSetting" 
             -filter "ServerComment like '%$name%'" 
if (!($website -eq $NULL)) { 
    #add some mimetype 
} 

,並列出了MimeMap集合:

([adsi]"IIS://localhost/MimeMap").MimeMap 

任何人都知道如何填寫空白,以便我可以添加mimetypes到現有的IIS6網站?

回答

2

太多的無奈和研究後確定好了,這是解決方案,我想出來的......

一)抓住COM DLL「Interop.IISOle.dll」,並把它放在容易引用 (如:引用COM組件 「活動DS IIS命名空間提供者」,在一個虛擬的項目,建立和搶bin文件夾中的DLL)

b)

function AddMimeType ([string] $websiteId, [string] $extension, 
                 [string] $application) 
{ 
    [Reflection.Assembly]::LoadFile("yourpath\Interop.IISOle.dll") | Out-Null; 
    $directoryEntry = New-Object System 
         .DirectoryServices 
         .DirectoryEntry("IIS://localhost/W3SVC/$websiteId/root"); 
    try { 
     $mimeMap = $directoryEntry.Properties["MimeMap"] 

     $mimeType = New-Object "IISOle.MimeMapClass"; 
     $mimeType.Extension = $extension 
     $mimeType.MimeType = $application 

     $mimeMap.Add($mimeType) 
     $directoryEntry.CommitChanges() 
     } 
    finally { 
     if ($directoryEntry -ne $null) { 
      if ($directoryEntry.psbase -eq $null) { 
       $directoryEntry.Dispose() 
      } else { 
       $directoryEntry.psbase.Dispose() 
      } 
     } 
    } 
} 

C)使用範例:

AddMimeType "123456" ".pdf" "application/pdf" 

參考文獻:Can I setup an IIS MIME type in .NET?

+0

哈!!你剛剛救了我轉換代碼在我的答案PS的工作:) – Kev 2011-02-23 16:16:24

+0

很高興幫助:) – mwjackson 2011-03-18 15:11:06

0

我有同樣的問題。 Interop.IISOle.dll的替代方法是使用InvokeMember來設置COM綁定。

$adsiPrefix = "IIS://$serverName" 
$iisPath = "W3SVC" 
$iisADSI = [ADSI]"$adsiPrefix/$iisPath" 

$site = $iisADSI.Create("IISWebServer", $script:webSiteNumber) 

$xapMimeType = New-Object -comObject MimeMap 
    SetCOMProperty $xapMimeType "Extension" ".xap" 
    SetCOMProperty $xapMimeType "MimeType" "application/x-silverlight-app" 
    $site.Properties["MimeMap"].Add($xapMimeType) 

    $site.SetInfo() 
    $site.CommitChanges() 

function SetCOMProperty($target, $member, $value) { 
    $target.psbase.GetType().InvokeMember($member, [System.Reflection.BindingFlags]::SetProperty, $null, $target, $value)   
} 
相關問題