Chỉnh sửa / Cài đặt các loại Mime với Powershell?


8

Vì vậy, tôi đã tự hỏi nếu có một cách cụ thể để thay đổi / chỉnh sửa một loại mime trong IIS 7.5 bằng powershell?

Cho đến nay tôi đã bắt gặp các giải pháp để thêm các mô phỏng như: http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html http: // forum. iis.net/t/1192371.aspx và một vài người khác có sách đang được tham khảo nhưng những cuốn sách đó không chứa bất kỳ thông tin nào về điều đó, tôi đã kiểm tra.

Có vẻ như sử dụng Add-WebConfigurationPropertyđược sử dụng, nhưng khi tôi sử dụng phương thức này cho một mô phỏng hiện có thì tôi sẽ nhận được một lỗi liên quan đến một mục trùng lặp (vì nó đã có trong đó), vì vậy phương thức này nằm ngoài cửa sổ.

Tôi đã cố gắng sử dụng Set-WebConfigurationPropertythay thế nhưng điều đó dẫn đến việc nó xóa TẤT CẢ các mục mimetype hiện có và chỉ để lại một trong số đó.

Vì vậy, có ai có một đề nghị hoặc có lẽ biết phương pháp chính xác để làm điều này? Tôi cũng đã cân nhắc thực hiện một cái gì đó như trước tiên là xóa mục nhập và sau đó thêm nó, vấn đề duy nhất là bạn sẽ cần phải biết cả tệp mimetypeExtension và mimeTypes (ví dụ văn bản / XML, v.v.). Vì vậy, tôi giả sử rằng trước tiên tôi cần phải có cả hai thuộc tính bằng cách sử dụng getwebconfigpropertyphương thức, sau đó xóa nó bằng cách phân tích các giá trị từ nó vào delete-webpropconfighàm và sau đó thêm nó ... Nhưng thực hiện ba bước chỉ để đặt một mô phỏng có vẻ quá mức ..

Theo những gì tôi hiểu, phương thức appcmd.exe thiết lập cấu hình "giá trị và thông số ở đây" sẽ giúp bạn thực hiện được .. vấn đề với điều này là rất tiếc là chúng tôi không thể sử dụng nó. Và vâng tôi hiểu rằng tôi có thể làm cho powershell thực thi lệnh appcmd thật không may đây không phải là một lựa chọn khả thi. Tôi đã thử googling và đọc trong sách để tìm giải pháp nhưng vẫn chưa đưa ra câu trả lời cho đến nay tại sao

1) set-webconfigurationpropertyphương thức xóa tất cả các mục mimetype khác

2) add-webconfigurationpropertysẽ không cho phép tôi thực hiện nó và ném thông báo "trùng lặp lỗi"

3) một giải pháp làm việc để làm điều này trong 1 dòng với powershell.

Câu trả lời:


7

Điều duy nhất có vẻ hoạt động là thế này:

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

Vì vậy, tôi đã sử dụng phương pháp này, vì có lẽ đã đề cập trước đó bất kỳ loại lệnh set-webconfiguration nào chỉ đơn giản ghi đè lên toàn bộ danh sách mimetype trong menu mimetype IIS.

Mong rằng điều này sẽ giúp ai đó trong tương lai


4

Bạn có thể sử dụng Set-WebConfigurationPropertynhưng bạn phải chỉ định trong bộ lọc XPath mà bạn muốn thay đổi.

Ví dụ: lệnh sau sẽ thay đổi loại mime với phần mở rộng tệp " .cienExt " thành " .changedExt " trong web.config gốc được sử dụng bởi máy chủ IIS:

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

mimeMap được sử dụng trong XPath vì cấu trúc của application.host.config như sau:

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

Tôi giả sử bạn đã sửa đổi mã được đề xuất bởi http://sclarson.blogspot.co.at/2011/08/adding-mime-type-to-iis-vis-powershell.html khi cố gắng sửa đổi mimeTypes bằng cách sử dụng Set-WebConfigurationProperty. Lý do tất cả mimeTypes đã bị ghi đè khi sử dụng sửa đổi sau đây trên mã trong liên kết

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

là bởi vì toàn bộ bộ sưu tập của mimeTypes đang được thay thế chỉ bằng một mục nhập.


Đây phải là câu trả lời được chấp nhận, @Orbital. Ngoài ra, sử dụng: Đặt- WebConfigurationProperty ... -Name mimeType -Value "application/new-mime-type"nếu bạn muốn thay đổi mimeType thay vì tiện ích mở rộng.
ctb

1

Tôi hiểu câu hỏi này đã cũ và đã được trả lời nhưng tôi muốn thêm vào cuộc trò chuyện cho người xem mới. Đã thử nghiệm trên IIS 8.5 Windows Server 2012R2. Thật không may, tôi không có quyền truy cập vào IIS 7.5.

Sử dụng phần mở rộng .zip làm phần mở rộng tệp ví dụ của tôi

Thêm một loại MIME mới:

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

Chỉnh sửa loại MIME hiện có:

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

Xóa một loại MIME hiện có:

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

Đọc / Lấy loại MIME hiện có:

$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

Nếu bạn không thể sử dụng appcmdset-webconfigurationproprtykhông hoạt động, có thể một chức năng được xây dựng tùy chỉnh sẽ hoạt động?

Lấy COM DLL "Interop.IISOle.dll" và đặt nó ở đâu đó dễ dàng được tham chiếu (ví dụ: tham chiếu thành phần COM "Active DS IIS Namespace Carrier" trong một dự án giả, xây dựng và lấy DLL từ thư mục 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"

Tham khảo: Câu trả lời được chấp nhận cho câu hỏi Cách sử dụng PowerShell để đặt Loại Mime trong trang web IIS?


1
Benny, trông có vẻ xen kẽ, tôi sẽ kiểm tra nó vào thứ hai khi tôi trở lại văn phòng. Cảm ơn vì điều này, tôi đánh giá đây là câu trả lời chính xác vì khá thẳng thắn tôi không có lựa chọn nào và điều này có vẻ như nó sẽ hoạt động. Cảm ơn bạn đã dành thời gian!
Quỹ đạo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.