Назад | Перейти на главную страницу

Редактирование / установка типов MIME с помощью Powershell?

Поэтому мне было интересно, есть ли конкретный способ изменить / отредактировать тип MIME в IIS 7.5 с помощью powershell?

Пока что я нашел решения для добавления таких миметиков, как: http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html http://forums.iis.net/t/1192371.aspx и несколько других, на книги которых есть ссылки, но эти книги не содержат никакой информации об этом, я проверил.

Похоже, что с помощью Add-WebConfigurationProperty используется, но когда я использую этот метод для существующего mimetype, я получаю сообщение об ошибке, связанное с повторяющейся записью элемента (так как он уже там), поэтому этот метод находится вне окна.

Я попытался использовать Set-WebConfigurationProperty вместо этого, но это привело к удалению ВСЕХ существующих записей mimetype и просто оставлению одной из них.

Итак, есть ли у кого-нибудь предложения или, возможно, знает правильный способ сделать это? Я также подумал о том, чтобы сделать что-то вроде того, чтобы сначала удалить запись, а затем добавить ее, единственная проблема в том, что вам нужно будет знать как mimetype fileExtension, так и mimeTypes (например, текст / XML и т. Д.). Поэтому я предполагаю, что мне нужно сначала получить оба свойства, используя getwebconfigproperty метод, затем удалите его, проанализировав значения из него в delete-webpropconfig функцию, а затем добавить ее ... Но три шага просто для установки mimetype кажутся излишними ...

Насколько я понимаю, метод appcmd.exe set config "values ​​and params here" в значительной степени просто делает это ... проблема в том, что, к сожалению, мы не можем его использовать. И да, я понимаю, что могу заставить PowerShell выполнить команду appcmd, к сожалению, это не жизнеспособный вариант. Я пробовал искать в Google и читать книги, но пока не нашел ответа, почему

1) set-webconfigurationproperty метод удаляет все остальные записи mimetype

2) add-webconfigurationproperty не позволит мне выполнить это и выдает сообщение об ошибке "дублирование ошибки"

3) рабочее решение для этого в одной строке с powershell.

Единственное, что работало, это вот что:

& $Env:WinDir\system32\inetsrv\appcmd.exe set config /section:staticContent /-"[fileExtension='.eml']"
& $Env:WinDir\system32\inetsrv\appcmd.exe set config /section:staticContent /+"[fileExtension='.eml',mimeType='application/octet-stream']"

Итак, я использовал этот метод, поскольку, возможно, упоминалось ранее, любая команда set-webconfiguration просто перезаписывает весь список mimetype в меню mimetype IIS.

Надеюсь, это поможет кому-то в будущем

Ты можешь использовать Set-WebConfigurationProperty но вы должны указать в фильтре XPath, какой тип MIME вы хотите изменить.

Например, следующая команда изменит тип MIME на расширение файла ".currentExt"к".changedExt"в корневом файле web.config, используемом сервером IIS:

Set-WebConfigurationProperty -Filter "//staticContent/mimeMap[@fileExtension='.currentExt']" -PSPath IIS:\ -Name fileExtension -Value ".changedExt"

mimeMap используется в XPath, потому что структура application.host.config выглядит следующим образом:

<staticContent lockAttributes="isDocFooterFileName">
   <mimeMap fileExtension=".323" mimeType="text/h323" />
   <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
   <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
   ...
</staticContent>

Я предполагаю, что вы изменяли код, предложенный http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html при попытке изменить mimeTypes с помощью Set-WebConfigurationProperty. Причина, по которой все mimeTypes были перезаписаны при использовании следующей модификации кода в ссылке

set-webconfigurationproperty //staticContent -name collection -value @{fileExtension='.otf'; mimeType='application/octet-stream'} 

потому что вся коллекция mimeTypes заменяется только одной записью.

Я понимаю, что это старый вопрос, и на него был дан ответ, но я хотел бы добавить в беседу для новых зрителей. Проверено на IIS 8.5 Windows Server 2012R2. К сожалению, у меня нет доступа к IIS 7.5.

Использование расширения .zip в качестве расширения файла в качестве примера

Добавление нового типа MIME:

Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent" -Name "." -Value @{ fileExtension='.zip'; mimeType='application/x-zip-compressed' }

Редактирование существующего типа MIME:

Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent/mimeMap[@fileExtension='.zip']" -Name "fileExtension" -Value ".example"

Удаление существующего типа MIME:

Remove-WebConfigurationProperty  -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent" -Name "." -AtElement @{ fileExtension= '.zip' }

Чтение / получение существующего типа MIME:

$getSetting = Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent" -Name "."
$getSetting.Collection | Where-Object { $_.fileExtension -eq ".zip"}
#OR
Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent" -Name "." | Where-Object { $_.fileExtension -eq ".zip"}

Если вы не можете использовать appcmd, и set-webconfigurationproprty не работает, может быть, будет работать специальная функция?

Возьмите COM-DLL "Interop.IISOle.dll" и поместите ее в удобное место (например, укажите COM-компонент "Active DS IIS Namespace Provider" в фиктивном проекте, соберите и возьмите 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"

Справка: Принятый ответ на вопрос Как использовать PowerShell для установки Mime Type на веб-сайте IIS?