所以我想知道是否有一种具体的方法来改变/编辑在IIS 7.5使用PowerShell的MIMEtypes?
到目前为止,我遇到了添加mimetypes的解决scheme,例如: http: //sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html http:// forums。 iis.net/t/1192371.aspx和其他一些有书被引用,但这些书不包含任何信息,我检查。
看起来好像使用Add-WebConfigurationProperty被使用,但是当我使用这个方法为一个现有的MIMEtypes,那么我将收到一个错误是有关重复项目条目(因为它已经在那里),所以这个方法是超出窗口。
我尝试使用Set-WebConfigurationProperty但是这导致它删除所有现有的mimetype条目,只是留下一个。
那么有没有人有一个build议,或者也许知道这样做的正确方法? 我也考虑做一些事情,如先删除条目,然后添加它,唯一的问题是你将需要知道mimetype fileExtension和mimeTypes(即文本/ XML等)。 所以我假设我需要先使用getwebconfigproperty方法来获取这两个属性,然后通过parsing它的值到delete-webpropconfig函数中,然后添加它来delete-webpropconfig它。但是,仅仅设置一个MIMEtypes的三个步骤似乎是过度的。 。
从我的理解,appcmd.exe设置configuration“价值和参数这里”方法将几乎只是直出做它..然而这个问题是,不幸的是,我们不能使用它。 是的,我明白我可以让PowerShell执行appcmd命令,不幸的是这不是一个可行的select。 我已经尝试了Googlesearch和阅读书籍的解决scheme,但迄今为止还没有拿出答案
1) set-webconfigurationproperty方法删除所有其他的mimetype条目
2) add-webconfigurationproperty不会允许我执行它并抛出一个“错误重复”消息
3)一个工作的解决scheme,在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命令都简单地覆盖了IIS mimetype菜单中的整个mimetype列表。
希望这有助于未来的人
您可以使用Set-WebConfigurationProperty但是您必须在XPathfilter中指定要更改的MIMEtypes。
例如,以下命令将在IIS服务器使用的根web.config中将文件扩展名“ .currentExt ”的MIMEtypes更改为“ .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>
我假设你正在修改http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.htmlbuild议的代码,当试图修改mimeTypes使用Set-WebConfigurationProperty 。 所有mimeTypes在链接代码中使用以下修改时被覆盖的原因
set-webconfigurationproperty //staticContent -name collection -value @{fileExtension='.otf'; mimeType='application/octet-stream'}
是因为整个mimeTypes集合正在被一个条目取代。
如果你不能使用appcmd ,并且set-webconfigurationproprty不起作用,那么一个定制的函数可能会工作吗?
抓住COM DLL“Interop.IISOle.dll”,并把它放在一个容易引用的地方(例如,在一个虚拟项目中引用COM组件“Active DS IIS命名空间提供程序”,从bin文件夹构build并获取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网站中设置MIMEtypes?