New-Object vs [type] :: New (), скрипт против ISE - PullRequest
0 голосов
/ 09 ноября 2019

Вздох. В другой день, еще один метод взаимодействия 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 ]

1 голос
/ 09 ноября 2019

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

using assembly system.security
0 голосов
/ 09 ноября 2019

Попробуйте:

Using namespace System.Security.Cryptography.Xml;

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

Казалось, что приведенный ниже код прекрасно работает для меня в Powershell Core:

Using namespace System.Security.Cryptography.Xml;

$xml = [xml]::New()
$signed = [SignedXml]::New($xml)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...