Powershell и System.Security.Cryptography.X509Сертификаты.X509Сертификат2 - PullRequest
1 голос
/ 14 июля 2011

Я получаю эту ошибку при запуске пространства имен system.security. Это то, что я бегу за

$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\mycert.cer")

New-Object: Cannot find type [System.Security.Cryptography.X509Certificates.X509Certificate2("C:\mycert.cer")]: make sure the assembly containing this type is loaded. 
At line:1 char:19
    + $cert = New-Object <<<<
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand**

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Попробуйте запустить это, чтобы увидеть, загружен ли у вас System.dll (должен быть по умолчанию):

[AppDomain]::CurrentDomain.GetAssemblies() | 
    Where {$_.Location -match '\\System\\'}

Если он загружен, эта команда должна отображать тип X509Certificate2:

[AppDomain]::CurrentDomain.GetAssemblies() | 
Where {$_.Location -match '\\System\\'} | 
%{$_.GetExportedTypes()} | Where {$_.Name -match 'X509Cert'}

Если System.dll не загружен (что было бы странно), попробуйте загрузить его:

Add-Type -AssemblyName System

См .: http://technet.microsoft.com/en-us/library/hh849914.aspx

1 голос
/ 16 июля 2011

Я решил свою проблему. Это легко:

cd\
$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\mycert.cer")

CD \ необходимо

0 голосов
/ 26 октября 2017

Я столкнулся с этим в ISE (но, кажется, относится и к обычному командному окну), и кажется, что использование автозаполнения автоматически Add-Type для всего, что вы ищете.Если вы запустите новый экземпляр и запустите:

[AppDomain]::CurrentDomain.GetAssemblies() | grep Security

, он не вернет System.Security, но если вы затем наберете это, и intellisense сделает свое дело:

[System.

Вы можетезатем запустите это снова:

[AppDomain]::CurrentDomain.GetAssemblies() | grep Security

И тогда он вернет System.Security.Вот почему вы можете написать сценарий, который работает нормально, а затем вернуться к нему позже, и он сломался.Использование intellisense не исправляет ваш сценарий, вместо этого вы должны добавить эту строку:

Add-Type System.Security

Или какая-либо библиотека не добавляется автоматически (кажется, что требуется имя файла dll, например, C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Security.dll).

Я уверен, что IseSteroids (платная надстройка ISE) может обнаружить это, может быть, и другие.

...