Modification / définition des types MIME avec Powershell?

8

Je me demandais donc s'il existe un moyen spécifique de changer / modifier un type MIME dans IIS 7.5 à l'aide de PowerShell?

Jusqu'à présent, j'ai trouvé des solutions pour ajouter des types MIME tels que: http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html http: // forums. iis.net/t/1192371.aspx et quelques autres qui ont des livres référencés mais ces livres ne contiennent aucune information à ce sujet, j'ai vérifié.

Il semble que l'utilisation de la Add-WebConfigurationPropertyest utilisée, mais lorsque j'utilise cette méthode pour un type de mime existant, je reçois une erreur liée à une entrée d'élément en double (car elle est déjà là), donc cette méthode est hors de la fenêtre.

J'ai essayé d'utiliser le à la Set-WebConfigurationPropertyplace, mais cela a entraîné la suppression de TOUTES les entrées de type MIME existantes et juste la sortie de l'une d'entre elles.

Alors, quelqu'un a-t-il une suggestion ou connaît-il la bonne méthode pour le faire? J'ai également envisagé de faire quelque chose comme supprimer d'abord l'entrée puis l'ajouter, le seul problème est que vous devrez connaître à la fois le fichier mimetype fileExtension et les mimeTypes (c.-à-d. Texte / XML, etc.). Je suppose donc que je devrais d'abord obtenir les deux propriétés à l'aide de la getwebconfigpropertyméthode, puis la supprimer en analysant les valeurs de celle-ci dans la delete-webpropconfigfonction, puis l'ajouter ... Mais suivre trois étapes pour définir un type MIME semble excessif.

D'après ce que je comprends, la méthode appcmd.exe set config "valeurs et paramètres ici" le fera à peu près tout simplement. Le problème avec cela est cependant que malheureusement nous ne pouvons pas l'utiliser. Et oui, je comprends que je peux faire en sorte que le PowerShell exécute la commande appcmd, malheureusement ce n'est pas une option viable. J'ai essayé de googler et de lire dans des livres pour trouver des solutions, mais je n'ai pas trouvé de réponse jusqu'à présent sur les raisons

1) la set-webconfigurationpropertyméthode supprime toutes les autres entrées de type MIME

2) le add-webconfigurationpropertyne me permettra pas de l'exécuter et lance un message "duplication d'erreur"

3) une solution de travail pour le faire en 1 ligne avec PowerShell.

Orbital
la source

Réponses:

7

La seule chose qui semblait fonctionner est la suivante:

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

J'ai donc opté pour cette méthode, comme peut-être mentionné précédemment, tout type de commande set-webconfiguration a simplement écrasé la liste entière des types de mimes dans le menu des types de mimes IIS.

J'espère que cela aidera quelqu'un à l'avenir

Orbital
la source
4

Vous pouvez utiliser Set-WebConfigurationPropertymais vous devez spécifier dans le filtre XPath le type de mime que vous souhaitez modifier.

Par exemple, la commande suivante changera le type MIME avec l'extension de fichier " .currentExt " en " .changedExt " dans le web.config racine utilisé par le serveur IIS:

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

mimeMap est utilisé dans XPath car la structure du fichier application.host.config est la suivante:

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

Je suppose que vous modifiez le code suggéré par http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html lorsque vous essayez de modifier les mimeTypes à l'aide Set-WebConfigurationProperty. La raison pour laquelle tous les mimeTypes étaient remplacés lors de l'utilisation de la modification suivante sur le code du lien

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

est parce que la collection entière de mimeTypes est remplacée par une seule entrée.

Castrohenge
la source
Cela devrait être la réponse acceptée, @Orbital. Utilisez également: Set- WebConfigurationProperty ... -Name mimeType -Value "application/new-mime-type"si vous souhaitez modifier le mimeType au lieu de l'extension.
ctb
1

Je comprends que cette question est ancienne et a reçu une réponse, mais je voudrais ajouter à la conversation pour les nouveaux téléspectateurs. Testé sur IIS 8.5 Windows Server 2012R2. Malheureusement, je n'ai pas accès à IIS 7.5.

Utiliser l'extension .zip comme exemple d'extension de fichier

Ajout d'un nouveau type MIME:

Add-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent" -Name "." -Value @{ fileExtension='.zip'; mimeType='application/x-zip-compressed' }

Modification d'un type MIME existant:

Set-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent/mimeMap[@fileExtension='.zip']" -Name "fileExtension" -Value ".example"

Suppression d'un type MIME existant:

Remove-WebConfigurationProperty  -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter "system.webServer/staticContent" -Name "." -AtElement @{ fileExtension= '.zip' }

Lecture / Obtention d'un type MIME existant:

$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"}
HiTech
la source
0

Si vous ne pouvez pas utiliser appcmdet set-webconfigurationproprtyne fonctionne pas, peut-être qu'une fonction personnalisée fonctionnera?

Saisissez la DLL COM "Interop.IISOle.dll" et placez-la quelque part facilement référencée (par exemple, référencez le composant COM "Active DS IIS Namespace Provider" dans un projet factice, créez et récupérez la DLL à partir du dossier 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"

Référence: la réponse acceptée à la question Comment utiliser PowerShell pour définir le type MIME dans un site Web IIS?

Benny Skogberg
la source
1
Benny, ça a l'air intéressant, je vérifierai lundi quand je serai de retour au bureau. Merci pour cela, je note cela comme la bonne réponse parce que franchement je n'ai pas d'options et cela semble fonctionner. Merci pour votre temps!
Orbital