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


8

所以我想知道是否存在使用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-WebConfigurationProperty正在使用,但是当我将这种方法用于现有的mimetype时,我将收到与重复项条目相关的错误(因为它已经在其中),因此该方法不在窗口之内。

我试图使用Set-WebConfigurationProperty代替,但是导致它删除了所有现有的mimetype条目,而只留下其中一个。

那么,有没有人提出建议或知道正确的方法呢?我还考虑过做类似先删除条目然后再添加条目的操作,唯一的问题是您将需要知道mimetype fileExtension和mimeTypes(即text / XML等)。因此,我假设我首先需要使用getwebconfigproperty方法来获取两个属性,然后通过将其值解析到delete-webpropconfig函数中然后再将其添加来将其删除...但是,仅通过三个步骤来设置mimetype似乎是多余的。

据我了解,appcmd.exe设置配置“此处的值和参数”方法几乎可以直接做到这一点。但是,与此相关的问题是不幸的是我们无法使用它。是的,我了解我可以使Powershell执行appcmd命令,但这不是一个可行的选择。我曾尝试使用Google搜寻和在书籍中阅读以寻求解决方案,但到目前为止仍未找到答案

1)该set-webconfigurationproperty方法删除所有其他模仿类型条目

2)add-webconfigurationproperty将不允许我执行该操作,并抛出“错误重复”消息

3)一个有效的解决方案,使用powershell在1行中完成此操作。

Answers:


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命令都可以简单地覆盖IIS mimetype菜单中的整个mimetype列表。

希望这对以后的人有帮助


4

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

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

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>

我假设您在尝试使用修改mimeType时,正在修改http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html建议的代码Set-WebConfigurationProperty。在链接中的代码上使用以下修改时,所有mimeTypes被覆盖的原因

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

这是因为mimeTypes的整个集合仅由一个条目代替。


这应该是公认的答案,@ Orbital。另外,WebConfigurationProperty ... -Name mimeType -Value "application/new-mime-type"如果要更改mimeType而不是扩展名,请使用:Set- 。
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命名空间提供程序”,从bin文件夹中生成并获取DLL)

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在IIS网站中设置Mime类型 ”的公认答案


1
本尼,看起来很有趣,我会在星期一回到办公室时检查一下。谢谢你,我认为这是正确的答案,因为坦率地说,我没有选择,这似乎可以解决。感谢您的宝贵时间!
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.