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

8

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

До сих пор я сталкивался с решениями для добавления mimetypes, такими как: 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 (то есть text / XML и т. Д.). Итак, я предполагаю, что мне нужно было бы сначала получить оба свойства, используя getwebconfigpropertyметод, затем удалить его, проанализировав значения из него в delete-webpropconfigфункции, а затем добавить его ... Но выполнение трех шагов просто для установки mimetype кажется чрезмерным ...

Из того, что я понимаю, метод appcmd.exe set config «значения и параметры здесь» в значительной степени просто сделает это ... проблема в том, что, к сожалению, мы не можем его использовать. И да, я понимаю, что могу заставить powershell выполнить команду appcmd, к сожалению, это нереальный вариант. Я пытался найти и найти в книгах книги, чтобы найти решения, но до сих пор не нашел ответа на вопрос, почему

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

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

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

орбитальный
источник

Ответы:

7

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

& $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 в меню IIS mimetype.

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

орбитальный
источник
4

Вы можете использовать, 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 заменяется только одной записью.

Castrohenge
источник
Это должен быть принятый ответ, @Orbital. Также используйте: Set - WebConfigurationProperty ... -Name mimeType -Value "application/new-mime-type"если вы хотите изменить mimeType вместо расширения.
ctb
1

Я понимаю, что этот вопрос старый и на него дан ответ, но я хотел бы добавить к разговору новых зрителей. Проверено на 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"}
Передовые технологии
источник
0

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

Возьмите COM DLL «Interop.IISOle.dll» и поместите ее куда-нибудь, где легко найти ссылку (например, обратитесь к компоненту COM «Поставщик пространства имен Active DS IIS» в фиктивном проекте, соберите и извлеките 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?

Бенни Скогберг
источник
1
Бенни, выглядит интересно, я проверю это в понедельник, когда я вернусь в офис. Спасибо за это, я оцениваю это как правильный ответ, потому что, честно говоря, у меня нет выбора, и похоже, что это будет работать. Спасибо за ваше время!
Орбитальный