Mengedit / Menyetel Jenis pantomim dengan Powershell?

8

Jadi saya bertanya-tanya apakah ada cara khusus untuk mengubah / mengedit tipe mime di IIS 7.5 menggunakan PowerShell?

Sejauh ini saya telah menemukan solusi untuk menambahkan mimetypes seperti: http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html http: // forum. iis.net/t/1192371.aspx dan beberapa orang lain yang memiliki buku yang direferensikan tetapi buku-buku itu tidak mengandung informasi tentang itu, saya memeriksa.

Sepertinya menggunakan Add-WebConfigurationPropertydigunakan, tetapi ketika saya menggunakan metode ini untuk mimetype yang ada maka saya akan menerima kesalahan yang berhubungan dengan entri item duplikat (karena sudah ada di sana), jadi metode ini keluar dari jendela.

Saya mencoba untuk menggunakan Set-WebConfigurationPropertytetapi yang mengakibatkan menghapus SEMUA entri mimetype yang ada dan hanya meninggalkan salah satunya.

Jadi apakah ada yang punya saran atau mungkin tahu metode yang benar untuk melakukan ini? Saya juga mempertimbangkan untuk melakukan sesuatu seperti pertama-tama menghapus entri dan kemudian menambahkannya, satu-satunya masalah adalah Anda perlu mengetahui baik mimetype fileExtension dan mimeTypes (yaitu teks / XML dll). Jadi saya berasumsi saya harus terlebih dahulu mendapatkan kedua properti menggunakan getwebconfigpropertymetode ini, kemudian menghapusnya dengan menguraikan nilai-nilai dari itu ke dalam delete-webpropconfigfungsi dan kemudian menambahkannya ... Tapi pergi tiga langkah hanya untuk mengatur mimetype sepertinya berlebihan ..

Dari apa yang saya mengerti, appcmd.exe mengatur config "nilai dan params di sini" metode akan cukup banyak langsung melakukannya .. masalah dengan ini adalah bahwa sayangnya kita tidak dapat menggunakannya. Dan ya saya mengerti saya bisa membuat PowerShell menjalankan perintah appcmd sayangnya ini bukan pilihan yang layak. Saya sudah mencoba googling dan membaca buku untuk mencari solusi tetapi sejauh ini belum menemukan jawaban mengapa

1) set-webconfigurationpropertymetode ini menghapus semua entri mimetype lainnya

2) add-webconfigurationpropertytidak akan mengizinkan saya untuk melakukan dan melempar pesan "duplikasi kesalahan"

3) solusi yang berfungsi untuk melakukan ini dalam 1 baris dengan PowerShell.

Orbital
sumber

Jawaban:

7

Satu-satunya hal yang tampaknya berhasil adalah ini:

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

Jadi saya telah menggunakan metode ini, seperti yang mungkin disebutkan sebelumnya segala jenis perintah konfigurasi web-set telah dengan sederhana menimpa seluruh daftar mimetype dalam menu mimetype IIS.

Semoga ini bisa membantu seseorang di masa depan

Orbital
sumber
4

Anda dapat menggunakan Set-WebConfigurationPropertytetapi Anda harus menentukan dalam filter XPath mimetype yang ingin Anda ubah.

Sebagai contoh, perintah berikut akan mengubah tipe mime dengan ekstensi file " .currentExt " menjadi " .changedExt " di root web.config yang digunakan oleh server IIS:

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

mimeMap digunakan di XPath karena struktur application.host.config adalah sebagai berikut:

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

Saya berasumsi Anda memodifikasi kode yang disarankan oleh http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html ketika mencoba memodifikasi mimeTypes menggunakan Set-WebConfigurationProperty. Alasan semua mimeTypes sedang ditimpa ketika menggunakan modifikasi berikut pada kode dalam tautan

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

karena seluruh koleksi mimeTypes sedang digantikan oleh hanya satu entri.

Castrohenge
sumber
Ini seharusnya jawaban yang diterima, @Orbital. Juga, gunakan: Set- WebConfigurationProperty ... -Name mimeType -Value "application/new-mime-type"jika Anda ingin mengubah mimeType bukan ekstensi.
ctb
1

Saya mengerti pertanyaan ini sudah lama dan sudah dijawab tetapi saya ingin menambah percakapan untuk pemirsa baru. Diuji pada IIS 8.5 Windows Server 2012R2. Sayangnya, saya tidak memiliki akses ke IIS 7.5.

Menggunakan ekstensi .zip sebagai ekstensi file contoh saya

Menambahkan jenis MIME baru:

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

Mengedit jenis MIME yang ada:

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

Menghapus jenis MIME yang ada:

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

Membaca / Mendapatkan jenis MIME yang ada:

$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
sumber
0

Jika Anda tidak dapat menggunakan appcmd, dan set-webconfigurationproprtytidak berfungsi, mungkin fungsi yang dibuat khusus akan berfungsi?

Ambil COM DLL "Interop.IISOle.dll" dan letakkan di suatu tempat yang mudah direferensikan (mis. Referensi komponen COM "Active DS IIS Namespace Provider" dalam proyek dummy, bangun dan ambil DLL dari folder 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"

Referensi: Jawaban yang diterima untuk pertanyaan. Bagaimana cara menggunakan PowerShell untuk mengatur Mime Type di situs web IIS?

Benny Skogberg
sumber
1
Benny, terlihat sedang campur tangan, aku akan memeriksanya pada hari Senin ketika aku kembali ke kantor. Terima kasih untuk ini, saya menilai ini sebagai jawaban yang benar karena saya terus terang keluar dari opsi dan sepertinya ini akan berhasil. Terima kasih atas waktu anda!
Orbital