使用 Powershell 编辑/设置 Mime 类型?

Orb*_*tal 9 iis powershell

所以我想知道是否有一种特定的方法可以使用 powershell 在 IIS 7.5 中更改/编辑 mime 类型?

到目前为止,我所遇到的解决方案,以添加MIME类型,如: http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html HTTP://论坛。 iis.net/t/1192371.aspx 和其他一些有书籍被引用但这些书籍不包含任何信息,我查了一下。

似乎使用了Add-WebConfigurationPropertyis used,但是当我将此方法用于现有的 mimetype 时,我将收到与重复项条目相关的错误(因为它已经在那里),因此此方法不在窗口中。

我试图改用 ,Set-WebConfigurationProperty但这导致它删除了所有现有的 mimetype 条目并只留下其中一个。

那么有没有人有建议或者可能知道这样做的正确方法?我还考虑过先删除条目然后添加它,唯一的问题是您需要知道 mimetype fileExtension 和 mimeTypes(即文本/XML 等)。所以我假设我需要首先使用该getwebconfigproperty方法获取两个属性,然后通过将其中的值解析到函数中来删除它delete-webpropconfig,然后添加它......但是仅仅通过三个步骤来设置一个 mimetype 似乎过度了..

据我所知,appcmd.exe set config "values and params here" 方法几乎可以直接执行.. 然而,这个问题是不幸的是我们不能使用它。是的,我知道我可以让 powershell 执行 appcmd 命令,但不幸的是这不是一个可行的选择。我曾尝试谷歌搜索和阅读书籍以寻求解决方案,但到目前为止还没有想出答案

1) 该set-webconfigurationproperty方法删除所有其他 mimetype 条目

2)add-webconfigurationproperty不允许我执行它并抛出“错误重复”消息

3) 在 1 行中使用 powershell 执行此操作的可行解决方案。

Orb*_*tal 9

唯一似乎有效的是:

& $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']"
Run Code Online (Sandbox Code Playgroud)

所以我采用了这种方法,正如前面可能提到的,任何类型的 set-webconfiguration 命令都只是覆盖了 IIS mimetype 菜单中的整个 mimetype 列表。

希望这有助于将来的某人


小智 7

我知道这个问题已经很老了并且已经得到解答,但我想为新观众添加一些内容。测试于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' }
Run Code Online (Sandbox Code Playgroud)

编辑现有的 MIME 类型:

Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent/mimeMap[@fileExtension='.zip']" -Name "fileExtension" -Value ".example"
Run Code Online (Sandbox Code Playgroud)

删除现有的 MIME 类型:

Remove-WebConfigurationProperty  -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent" -Name "." -AtElement @{ fileExtension= '.zip' }
Run Code Online (Sandbox Code Playgroud)

读取/获取现有的 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"}
Run Code Online (Sandbox Code Playgroud)


Cas*_*nge 5

您可以使用,Set-WebConfigurationProperty但必须在 XPath 过滤器中指定要更改的 mimetype。

例如,以下命令将在 IIS 服务器使用的根 web.config中将文件扩展名为“ .currentExt ”的 mime 类型更改为“ .changedExt ”:

Set-WebConfigurationProperty -Filter "//staticContent/mimeMap[@fileExtension='.currentExt']" -PSPath IIS:\ -Name fileExtension -Value ".changedExt"
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我假设你通过修改建议的代码http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html试图修改使用MIME类型时Set-WebConfigurationProperty。对链接中的代码使用以下修改时所有 mimeTypes 都被覆盖的原因

set-webconfigurationproperty //staticContent -name collection -value @{fileExtension='.otf'; mimeType='application/octet-stream'} 
Run Code Online (Sandbox Code Playgroud)

是因为整个 mimeTypes 集合都被一个条目替换了。