Новый объект против [тип] :: New(), скрипт против ISE

Вздох. В другой день, еще одно взаимодействие метода PowerShell с.NET, которое я просто не понимаю. На этот раз с подписанным XML, но это проблема с тем, как создать новый объект.

$signedXml = New-Object system.security.cryptography.xml.signedXml -argumentList:$xmlработает. Но по возможности я переезжал в[type]::New(). А также...$signedXml = [System.Security.Cryptography.Xml.SignedXml]::New($xml)не работает. В сценарии. Прекрасно работает в ISE, но при запуске в качестве скрипта я получаю

Не удалось найти тип [System.Security.Cryptography.Xml.SignedXml].

Итак, что происходит под капотом, так что использование конструктора работает только в ISE, в то время как New-Object также работает в сценарии. И как понять, что потерпит неудачу? У меня много других вещей, в которые я переехала[type]::New()без проблем. Единственный ли у меня вариант - вернуться к командлету, когда конструктор не работает? На мой взгляд, это приводит к менее согласованному и читаемому коду.

2 ответа

У меня это тоже не сработало в ISE, пока я не сделал это. Возможно, вы загрузили в ISE какой-нибудь модуль, который делал что-то подобное.

using assembly system.security

Пытаться:

Using namespace System.Security.Cryptography.Xml;

Powershell имеет возможность вызывать пространства имен, такие как C#.

Приведенный ниже код, похоже, отлично работал в Powershell Core:

Using namespace System.Security.Cryptography.Xml;

$xml = [xml]::New()
$signed = [SignedXml]::New($xml)
Другие вопросы по тегам