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ですが、既存のMIMEタイプにこのメソッドを使用すると、重複するアイテムエントリに関連するエラーが表示されます(既にそこにあるため)、このメソッドはウィンドウの外にあります。

私はSet-WebConfigurationProperty代わりに使用しようとしましたが、その結果、既存のMIMEタイプのエントリがすべて削除され、そのうちの1つが残っただけになりました。

それで、誰かが提案をしたり、おそらくこれを行う正しい方法を知っていますか?最初にエントリを削除してから追加するなどの方法も検討しました。唯一の問題は、mimetype fileExtensionとmimeTypes(つまり、テキスト/ XMLなど)の両方を知る必要があることです。したがって、最初にgetwebconfigpropertyメソッドを使用して両方のプロパティを取得し、それから値を解析してdelete-webpropconfig関数に削除してから追加する必要があると想定します。

私が理解していることから、appcmd.exe set config "values and params here"メソッドは、ほぼそのまま実行します。しかし、これに関する問題は、残念ながら、使用できないことです。そして、はい、残念ながらpowershellにappcmdコマンドを実行させることができることを理解しています。これは実行可能なオプションではありません。私はグーグルで解決策を見つけるために本を読んでみましたが、これまでのところ理由について答えを思いつきませんでした

1)set-webconfigurationpropertyメソッドは他のすべてのmimetypeエントリを削除します

2)add-webconfigurationpropertyこれを実行することはできず、「エラー複製」メッセージがスローされます

3)PowerShellを使用してこれを1行で行うための実用的なソリューション。

回答:


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のMIMEタイプメニュー内のMIMEタイプリスト全体を上書きしただけです。

これが将来の誰かを助けることを願っています


4

使用できますSet-WebConfigurationPropertyが、変更するMIMEタイプをXPathフィルターで指定する必要があります。

たとえば、次のコマンドは、ファイル拡張子「とMIMEタイプに変更されます.currentExt」を「.changedExt IISサーバーが使用するルートweb.configファイル内の」:

Set-WebConfigurationProperty -Filter "//staticContent/mimeMap[@fileExtension='.currentExt']" -PSPath IIS:\ -Name fileExtension -Value ".changedExt"

mimeMap application.host.configの構造は次のとおりであるため、XPathで使用されます。

<staticContent lockAttributes="isDocFooterFileName">
   <mimeMap fileExtension=".323" mimeType="text/h323" />
   <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
   <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
   ...
</staticContent>

を使用してmimeTypesを変更しようとしたときに、http: //sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html によって提案されたコードを変更していたと想定していますSet-WebConfigurationProperty。リンク内のコードで次の変更を使用したときにすべてのmimeTypeが上書きされた理由

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

これは、mimeTypesのコレクション全体が1つのエントリだけに置き換えられているためです。


これは、@ Orbitalの承認済みの回答でなければなりません。また、WebConfigurationProperty ... -Name mimeType -Value "application/new-mime-type"拡張子の代わりにmimeTypeを変更する場合は、Set-を使用します。
ctb 2016

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

を使用できずappcmdset-webconfigurationproprty機能しない場合は、カスタムビルド関数が機能する可能性がありますか?

COM DLL "Interop.IISOle.dll"を取得し、簡単に参照できる場所に配置します(たとえば、ダミープロジェクトでCOMコンポーネント "Active DS IIS Namespace Provider"を参照し、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 WebサイトでMIMEタイプを設定する方法」という質問に対する承認された回答


1
ベニー、面白そうだ、オフィスに戻った月曜日にチェックアウトする。これをありがとう、私はこれを正解と評価しています。正直言って、オプションがまったくないため、これはうまくいくようです。お時間をいただきありがとうございます!
オービタル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.