Lorsque j'essaye d'utiliser Import-PfxCertificate
, j'obtiens une erreur lorsque le compte utilisateur avec lequel j'exécute le script n'est pas connecté:
Import-PfxCertificate: le système ne trouve pas le fichier spécifié. (Exception de HRESULT: 0x80070002)
Lorsque j'ouvre une session RDP sur le serveur sur lequel le script s'exécute sur ce compte utilisateur, cela fonctionne sans problème. La chose étrange est que Test-Path $ certfile -PathType Leaf
renvoie true dans les deux cas. Que se passe-t-il?
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
Le script est donc exécuté en tâche de fond sur un minuteur sur le serveur et quand,
cas 1: compte utilisateur qui est utilisé pour exécuter le script a une session RDP active, le script fonctionne correctement.
cas 2: le compte utilisateur qui est utilisé pour exécuter le script n'a pas de session RDP active, le script échoue.
Modifier: j'ai trouvé quelque chose dans l'erreur [1].
Test-Path $certfile -PathType Leaf #always true Import-PfxCertificate -FilePath $certfile -CertStoreLocation Cert:\CurrentUser\My -Password $Secure_String_Pwd
Qu'est-ce que c'est alors?
3 Réponses :
J'ai exécuté votre commande sur ma console et je n'ai eu aucun problème avec l'importation. Je suis administrateur de la machine qui contient ma console. J'ai essayé cela avec la session powerShell élevée et non élevée. Les deux ont fonctionné.
$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
Si cela ne vous aide pas du tout, je vais simplement le supprimer.
Essayez ce morceau de code et voyez qu'il fonctionne. Veuillez publier une exception complète si cela ne fonctionne pas.
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 }
J'espère que cela vous aidera.
Cela n'a pas aidé. L'exception complète est
PSParentPath: Microsoft.PowerShell.Security \ Certificate :: LocalMachine \ My
Sujet de l'empreinte numérique
---------- -------
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX CN = derp
Connect-AzureRmAccount: le système ne trouve pas le fichier spécifié.Dans C: \ temp \ script.ps1: 8 char: 5 + Connect-AzureRmAccount -ApplicationId $ appid -CertificateThumbpri ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ + CategoryInfo: CloseError: (:) [Connect-AzureRmAccount], Crypto graphicException + FullyQualifiedErrorId: Microsoft.Azure.Commands.Profile.ConnectAzureRmA ccountCommand
Quoi qu'il en soit, j'ai contourné le problème en utilisant C #.
Cela peut ne pas convenir à votre situation, mais pourriez-vous utiliser un autre magasin de certificats: cert: \ localMachine \ my
Cela m'a aidé à résoudre le problème. J'ai donc changé le magasin de certificats pour LocalMachine et il m'a fallu donner les privilèges d'administrateur du compte utilisateur en cours d'exécution, mais maintenant cela fonctionne. La seule chose est que cela ne fait qu'éliminer le même problème plus loin dans le script et le rend encore plus étrange. Maintenant, j'obtiens la même erreur avec Connect-AzureRmAccount et il n'utilise même pas de fichiers!