2
votes

PowerShell: le système ne peut pas trouver le fichier lorsque l'utilisateur n'est pas connecté

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?


2 commentaires

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!


3 Réponses :


0
votes

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.


0 commentaires

0
votes

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.


0 commentaires

0
votes

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 #.


0 commentaires