Modifica / Impostazione dei tipi Mime con Powershell?


8

Quindi mi chiedevo se esiste un modo specifico per cambiare / modificare un tipo MIME in IIS 7.5 usando PowerShell?

Finora ho trovato soluzioni per aggiungere mimetipi come: http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html http: // forum. ho verificato che iis.net/t/1192371.aspx e un paio di altri a cui fanno riferimento i libri, ma quei libri non contengono alcuna informazione al riguardo.

Sembra che Add-WebConfigurationPropertyvenga utilizzato il metodo utilizzato, ma quando utilizzo questo metodo per un mimetype esistente, riceverò un errore correlato a una voce di elemento duplicata (poiché è già presente), quindi questo metodo è fuori dalla finestra.

Ho tentato di utilizzare Set-WebConfigurationPropertyinvece, ma ciò mi ha portato a eliminare TUTTE le voci mimetype esistenti e a lasciarne una.

Quindi qualcuno ha un suggerimento o forse conosce il metodo corretto per farlo? Ho anche pensato di fare qualcosa come cancellare prima la voce e poi aggiungerla, l'unico problema è che dovrai conoscere sia il file mimetypeExtension che i mimeTypes (cioè text / XML ecc.). Quindi suppongo che dovrei prima ottenere entrambe le proprietà usando il getwebconfigpropertymetodo, quindi eliminarlo analizzando i valori da esso nella delete-webpropconfigfunzione e quindi aggiungerlo ... Ma fare tre passi solo per impostare un mimetype sembra eccessivo ..

Da quello che ho capito, l'appcmd.exe imposta il metodo di configurazione di "valori e parametri qui" praticamente lo farà semplicemente .. il problema con questo, tuttavia, è che purtroppo non possiamo usarlo. E sì, capisco che posso fare in modo che PowerShell esegua il comando appcmd, sfortunatamente questa non è un'opzione praticabile. Ho provato a cercare su google e leggere libri per trovare soluzioni, ma finora non ho trovato una risposta sul perché

1) il set-webconfigurationpropertymetodo elimina tutte le altre voci del mimetype

2) il add-webconfigurationpropertynon mi permetterà di eseguirlo e genera un messaggio di "duplicazione errori"

3) una soluzione funzionante per farlo in 1 riga con PowerShell.

Risposte:


7

L'unica cosa che sembrava funzionare è questa:

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

Quindi sono andato con questo metodo, come forse accennato in precedenza, qualsiasi tipo di comando set-webconfiguration ha semplicemente sovrascritto l'intero elenco di mimetype all'interno del menu IIS mimetype.

Spero che questo aiuti qualcuno in futuro


4

È possibile utilizzare Set-WebConfigurationPropertyma è necessario specificare nel filtro XPath quale tipo di mimetizzazione si desidera modificare.

Ad esempio il seguente comando cambierà il tipo mime con l'estensione " .currentExt " in " .changedExt " nel web.config root usato dal server IIS:

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

mimeMap viene utilizzato in XPath perché la struttura di application.host.config è la seguente:

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

Suppongo che stavi modificando il codice suggerito da http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html quando provi a modificare mimeTypes usando Set-WebConfigurationProperty. Il motivo per cui tutti i mimeTypes venivano sovrascritti quando si utilizzava la seguente modifica sul codice nel collegamento

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

è perché l'intera raccolta di mimeTypes viene sostituita da una sola voce.


Questa dovrebbe essere la risposta accettata, @Orbital. Inoltre, utilizzare: Imposta- WebConfigurationProperty ... -Name mimeType -Value "application/new-mime-type"se si desidera modificare mimeType anziché l'estensione.
ctb,

1

Capisco che questa domanda è vecchia e ha ricevuto risposta, ma vorrei aggiungere alla conversazione per i nuovi spettatori. Testato su IIS 8.5 Windows Server 2012R2. Sfortunatamente, non ho accesso a IIS 7.5.

Utilizzo dell'estensione .zip come estensione del mio esempio

Aggiunta di un nuovo tipo MIME:

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

Modifica di un tipo MIME esistente:

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

Rimozione di un tipo MIME esistente:

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

Lettura / Ottenere un tipo MIME esistente:

$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

Se non puoi usare appcmde set-webconfigurationproprtynon funziona, forse funzionerà una funzione personalizzata?

Prendi la DLL COM "Interop.IISOle.dll" e mettila da qualche parte facilmente referenziata (es. Fai riferimento al componente COM "Provider di spazi dei nomi IIS DS attivo" in un progetto fittizio, costruisci e prendi la DLL dalla cartella 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"

Riferimento: la risposta accettata alla domanda Come utilizzare PowerShell per impostare il tipo Mime in un sito Web IIS?


1
Benny, sembra interessante, lo controllerò lunedì quando torno in ufficio. Grazie per questo, lo sto valutando come la risposta corretta perché sinceramente non ho opzioni e questo sembra funzionare. Grazie per il tuo tempo!
Orbitale,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.