Editando / definindo tipos Mime com o Powershell?

7

Então, eu queria saber se existe uma maneira específica de alterar / editar um tipo mime no IIS 7.5 usando o powershell?

Até agora, encontrei soluções para adicionar míetipos, como: link link e um par de outros que têm livros sendo referenciados, mas esses livros não contêm nenhuma informação sobre isso, eu verifiquei.

Parece que é usado o Add-WebConfigurationProperty , mas quando eu uso esse método para um tipo MIM existente, recebo um erro relacionado a uma entrada de item duplicada (já que ele já está lá), então esse método é fora da janela.

Eu tentei usar o Set-WebConfigurationProperty , mas isso resultou na exclusão de TODAS as entradas existentes do tipo MIME e acabou deixando uma delas.

Então alguém tem uma sugestão ou sabe o método correto de fazer isso? Eu também considerei fazer algo como primeiro excluir a entrada e, em seguida, adicioná-la, o único problema é que você precisa saber tanto o mimetype fileExtension quanto o mimeTypes (ou seja, text / XML etc). Então eu suponho que eu precisaria primeiro obter as duas propriedades usando o método getwebconfigproperty , em seguida, excluí-lo analisando os valores dele na função delete-webpropconfig e, em seguida, adicioná-lo ... Mas indo três etapas apenas para definir um mimetype parece excessivo ..

Pelo que eu entendi, o método appcmdd.exe config "values and params here" será bem direto. O problema é que infelizmente não podemos usá-lo. E sim, eu entendo que posso fazer o powershell executar o comando appcmd, infelizmente, essa não é uma opção viável. Eu tentei pesquisar e ler livros em busca de soluções, mas não encontrei uma resposta sobre o porquê

1) o método set-webconfigurationproperty exclui todas as outras entradas do tipo MIME

2) o add-webconfigurationproperty não me permite executá-lo e lança uma mensagem de "duplicação de erro"

3) uma solução de trabalho para fazer isso em uma linha com o powershell.

    
por Orbital 09.11.2013 / 00:13

3 respostas

6

A única coisa que parece funcionar é esta:

& $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']"

Então, eu fui com este método, como talvez mencionado anteriormente, qualquer tipo de comando set-webconfiguration simplesmente substituiu toda a lista de tipos MIME no menu IIS MIMEYPE.

Espero que isso ajude alguém no futuro

    
por 20.11.2013 / 15:14
4

Você pode usar Set-WebConfigurationProperty , mas você precisa especificar no filtro XPath qual tipo MIME deseja alterar.

Por exemplo, o comando a seguir alterará o tipo mime com a extensão de arquivo " .currentExt " para " .changedExt " no web.config raiz usado pelo IIS servidor:

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

mimeMap é usado no XPath porque a estrutura do application.host.config é a seguinte:

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

Suponho que você esteja modificando o código sugerido por link ao tentar modificar o mimeTypes usando Set-WebConfigurationProperty . A razão pela qual todos os mimeTypes estavam sendo sobrescritos ao usar a seguinte modificação no código no link

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

é porque a coleção inteira de mimeTypes está sendo substituída por apenas uma entrada.

    
por 27.08.2014 / 11:41
0

Se você não pode usar appcmd e set-webconfigurationproprty não está funcionando, talvez uma função personalizada funcione?

Grab the COM DLL "Interop.IISOle.dll" and put it somewhere easily referenced (eg. reference the COM component "Active DS IIS Namespace Provider" in a dummy project, build and grab the DLL from the bin folder)

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"

Referência: a resposta aceita para a pergunta Como usar o PowerShell para definir o tipo MIME em um site do IIS?

    
por 09.11.2013 / 09:13