PowerShell: система не может найти файл, когда пользователь не вошел в систему - PullRequest
0 голосов
/ 11 февраля 2019

Когда я пытаюсь использовать Import-PfxCertificate, я получаю сообщение об ошибке, когда учетная запись пользователя, с которым я запускаю скрипт, не вошла в систему:

Import-PfxCertificate: система не может найтиуказанный файл(Исключение из HRESULT: 0x80070002)

Когда я открываю сеанс RDP с сервером, на котором выполняется сценарий для этой учетной записи пользователя, он работает без проблем.Странно то, что Test-Path $certfile -PathType Leaf возвращает true в обоих случаях.Что происходит?

Test-Path $certfile -PathType Leaf #always true
Import-PfxCertificate -FilePath $certfile -CertStoreLocation Cert:\CurrentUser\My -Password $Secure_String_Pwd

Таким образом, сценарий запускается как фоновое задание для таймера на сервере, и когда

case 1: учетная запись пользователя, которая используется для запуска сценарияимеет активный сеанс RDP, сценарий работает нормально.

case 2: учетная запись пользователя, которая используется для запуска сценария, не имеет активного сеанса RDP, сценарий завершается ошибкой.

Редактировать:Я нашел что-то по ошибке [1].

New-Item : Could not find a part of the path 'C:\Users\Default\.Azure\AzInstallationChecks.json'.
At C:\Program Files\WindowsPowerShell\Modules\AzureRM.profile\5.8.2\StartupScripts\AzureRmError.ps1:17 char:9

Что это тогда?

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Попробуйте этот кусок кода и убедитесь, что он работает.Пожалуйста, опубликуйте полное исключение, если оно не работает.

try
{
$Secure_String_Pwd = ConvertTo-SecureString 'DDDDD12345' -AsPlainText -Force
Import-PfxCertificate -FilePath 'C:\LocalPath\local.pfx' -CertStoreLocation Cert:\LocalMachine\My -Password $Secure_String_Pwd
$thumbprint =  (Get-ChildItem -Path cert:\LocalMachine\my| Where-Object {$_.Subject -eq "CN=certificateNameWithoutextension"}).Thumbprint

# code for connect-Azure RM account
Connect-AzureRmAccount -ApplicationId $appid -CertificateThumbprint $thumbprint -Tenant $tenant -ServicePrincipal
}
catch
{
    Write-Output $_
    echo $_.Exception|format-list -force
}

Надеюсь, это поможет.

0 голосов
/ 26 февраля 2019

Это не помогло.Полное исключение:

PSParentPath: Microsoft.PowerShell.Security \ Certificate :: LocalMachine \ My

Тема отпечатка
---------- ------
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. CN = derp
Connect-AzureRmAccount: Системе не удается найти указанный файл.

На C: \ temp \ script.ps1: 8 char: 5 + ConnectAzureRmAccount -ApplicationId $ appid -CertificateThumbpri ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: CloseError: (:) [Connect-AzureRmAccount], Crypto graphicException + FullyQualifiedErrorId: Microsoft.Azure.Commands.Profile.ConnectAzureRmA ccountCommand

В любом случае, я обошел проблему с помощью C #.

0 голосов
/ 11 февраля 2019

Я выполнил вашу команду на своей консоли, и у меня не было проблем с импортом.Я администратор на машине, которая содержит мою консоль.Я попытался сделать это с сеансом PowerShell с повышенными и не повышенными правами.Оба работали.

$certfile = "C:\temp\cert.pfx"
$secure_string_pwd = convertto-securestring -string "password" -asplaintext -force
Import-PfxCertificate -FilePath $certfile -CertStoreLocation Cert:\CurrentUser\My -Password $Secure_String_Pwd

Если это не поможет, я просто удалю это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...