Powershell로 Mime 유형 편집 / 설정?


8

그래서 powershell을 사용하여 IIS 7.5에서 mime 유형을 변경 / 편집하는 구체적인 방법이 있는지 궁금합니다.

지금까지 필자는 http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html http : // forums 와 같은 MIME 유형을 추가하는 솔루션을 살펴 보았습니다 . iis.net/t/1192371.aspx 및 참조되는 책이 있지만 그 책에 대한 정보가 포함되어 있지 않은 다른 몇 가지가 있습니다.

사용하는 것처럼 보이지만 Add-WebConfigurationProperty기존 mimetype에 대해이 방법을 사용하면 중복 항목 항목과 관련된 오류가 발생하므로 (이미 거기에 있기 때문에)이 방법은 창 밖입니다.

Set-WebConfigurationProperty대신 대신 사용하려고했지만 기존의 모든 mimetype 항목을 삭제하고 그중 하나를 그대로 두었습니다.

그렇다면 누구나 제안을하거나 올바른 방법을 알고 있습니까? 또한 먼저 항목을 삭제 한 다음 추가하는 것과 같은 것을 고려했지만 유일한 문제는 mimetype fileExtension과 mimeTypes (예 : text / XML 등)를 모두 알아야한다는 것입니다. 그래서 먼저 getwebconfigproperty메서드를 사용하여 두 속성을 모두 얻은 다음 값을 delete-webpropconfig함수 로 구문 분석하여 삭제하고 추가해야합니다 ...하지만 mimetype을 설정하기 위해 세 단계를 진행하면 과도한 것처럼 보입니다.

내가 이해 한 바에 따르면, appcmd.exe set config "values ​​and params here"메소드는 거의 똑같이 할 것입니다. 그러나 이것의 문제는 불행히도 우리가 사용할 수 없다는 것입니다. 그리고 네, 불행히도 powershell이 ​​appcmd 명령을 실행하도록 할 수 있다는 것을 이해합니다. 나는 해결책을 찾기 위해 책에서 인터넷 검색과 독서를 시도했지만 왜 지금까지 답을 얻지 못했습니다.

1)이 set-webconfigurationproperty메소드는 다른 모든 mimetype 항목을 삭제합니다

2) add-webconfigurationproperty의지하여 수행 할 수 없으며 "오류 복제"메시지가 표시됩니다.

3) powershell과 함께 한 줄 로이 작업을 수행하는 솔루션.

답변:


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있지만 변경하려는 MIME 유형을 XPath 필터에 지정해야합니다.

예를 들어 다음 명령은 IIS 서버에서 사용하는 루트 web.config에서 파일 확장자가 " .currentExt "인 mime 유형 을 " .changedExt "로 변경합니다.

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>

를 사용하여 mimeType을 수정하려고 할 때 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의 전체 컬렉션이 하나의 항목으로 대체되기 때문입니다.


이것은 @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"

참조 : IIS 웹 사이트에서 PowerShell을 사용하여 Mime 유형을 설정하는 방법 질문에 대한 대답은 무엇입니까?


1
베니, 심문을하면서 월요일에 사무실로 돌아 왔을 때 확인해 볼게 고마워, 나는 이것을 정답으로 평가하고 있습니다. 왜냐하면 솔직히 옵션에서 벗어 났기 때문에 이것이 효과가있는 것처럼 보입니다. 시간 내 주셔서 감사합니다!
궤도
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.