Новый объект против [тип] :: 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)