Как использовать IMAPI2 Интерфейс IBurnVerification в PowerShell?

Я делаю сценарий для записи изображения на диск с IMAPI2 в PowerShell.

Я не могу использовать IBurnVerification интерфейс для того, чтобы установить BurnVerificationLevel так что он проверит ожог.

Я скомпилировал Interop, содержащий интерфейс, в dll и загрузил его из моего скрипта, поскольку его, очевидно, нет в dll системы.

Поэтому я попытался бросить междуMsftDiscFormat2Dataвозражать противIBurnVerification интерфейс (MsftDiscFormat2Data инвентарь IBurnVerification) и это выдает мне эту ошибку каждый раз:

Невозможно преобразовать значение "System.__ComObject" типа "System.__ComObject#{27354153-9f64-5b0f-8f00-5d77afbe261e}" в тип "Storage.Interop.IMAPIv2 .IBurnVerification".

Пример кода:

[System.Reflection.Assembly]::LoadFrom("path\FixedIMAPI2.dll")

$DiscFormatData = New-Object -com IMAPI2.MsftDiscFormat2Data

$BurnVerification = [Storage.Interop.IMAPIv2.IBurnVerification]$DiscFormatData

Следующее также не дало ему работать:

$DiscFormatData = New-Object Storage.Interop.IMAPIv2.MsftDiscFormat2Data

1 ответ

Отказ от ответственности: у меня нет опыта работы в Power Shell. Я отвечаю с точки зрения C#, предполагая, что подобная концепция может быть применима к вашей технологии.

Я работал с IMAPI с C#. У меня была похожая проблема (приведение интерфейсов), о которой вы упоминали. Приведение интерфейсов было сложно в C#; То же самое может быть в случае с оболочкой питания. В поисках решения я наткнулся на этот пост. Ниже приводится цитата из статьи:

IMAPI2 был реализован с использованием двух отдельных COM DLL: imapi2.dll и imapi2fs.dll. imapi2.dll обрабатывает большинство API-интерфейсов устройства и записи, а imapi2fs.dll обрабатывает все файловые системы и API-интерфейсы IStream. Это может показаться не большой проблемой, особенно если вы используете C++. Это действительно становится большой проблемой для.NET, потому что вам нужно взять IStream, созданный из IMAPI2FS, и использовать его в IMAPI2 для записи на носитель. В итоге вы получите сообщение об ошибке, примерно так:

Unable to cast object of type 'IMAPI2FS.FsiStreamClass' to type 'IMAPI2.IStream'

Microsoft осознала эту проблему и создала проект под названием IBurn, который они выпустили в Windows Vista SDK. Они создали пространство имен Interop, которое объединило множество классов, перечислений и интерфейсов IMAPI2 и IMAPI2FS в одно пространство имен в файле Interop.cs. Это устранило проблему невозможности приведения IStream из IMAPI2FS в IMAPI2.

Помимо вышесказанного, есть другие проблемы при кастинге, упомянутые в посте. Боюсь, что не могу найти решение, но надеюсь, что чтение статьи может вам помочь.

Другие вопросы по тегам