Поэтому мне было интересно, есть ли конкретный способ изменить / отредактировать тип 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?