Как использовать POWERSHELL для установки MimeTypes на веб-сайте IIS6? - PullRequest
2 голосов
/ 02 июня 2010

Я хочу иметь возможность реплицировать это поведение adsutil.vbs в PowerShell:

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 ]

2 голосов
/ 03 июня 2010

Хорошо, после долгих разочарований и исследований, это решение, которое я придумала ...

a) Возьмите COM DLL "Interop.IISOle.dll" и поместите ее куда-нибудь, где легко найти ссылку (например, ссылка на COM-компонент «Active DS IIS Namespider» в фиктивном проекте, сборка и извлечение DLL из папки bin)

б)

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()
            }
        }
    }
}

в) Пример использования:

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

Ссылки: Можно ли настроить тип IIS MIME в .NET?

0 голосов
/ 17 февраля 2012

У меня была такая же проблема. Альтернативой 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)        
}
...