web-dev-qa-db-ja.com

Powershellを使用したMIMEタイプの編集/設定?

IIS 7.5でpowershellを使用してMIMEタイプを変更/編集する特定の方法があるかどうか疑問に思っていましたか?

これまでのところ、次のようなMIMEタイプを追加するためのソリューションに出くわしました http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html = http://forums.iis.net/t/1192371.aspx と、参照されている本を持っているが、それらの本にはそれに関する情報が含まれていない他のカップルを確認しました。

Add-WebConfigurationPropertyを使用しているようですが、既存のMIMEタイプにこのメソッドを使用すると、重複したアイテムエントリに関連するエラーが表示されます(すでにそこにあるため)、このメソッドは無効ですウィンドウの。

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

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

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

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

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

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

8
Orbital

動作しているように思われた唯一のものはこれです:

& $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メニュー内のMIMEタイプリスト全体を単に上書きしました。

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

7
Orbital

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

たとえば、次のコマンドは、ファイル拡張子が「。currentExt」のMIMEタイプを、ルートの「。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>

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

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

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

4
Castrohenge

この質問は古く、回答済みですが、新しい視聴者向けの会話に追加したいと思います。 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"}
1
HiTech

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タイプをIIS Webサイト?)に設定する方法

0
Benny Skogberg