none
Script Powershell Forcer le non RRS feed

  • Question

  • Bonjour,

    J'ai fait un script pour faire un changement de certificat sur plusieurs serveurs.

    Lorsque je fais "Enable-ExchangeCertificate" j'ai une mire sur powershell qui me propose de remplacer le certificat existant moi je veux répondre Non et le supprimer manuellement plus tard. Mais je n'arrive pas forcer le Non, par défaut ça répond par Oui. 

    Avez-vous une solution ? 

    Merci

    mardi 5 janvier 2021 14:17

Toutes les réponses

  • Salut,

    echo n | Enable-ExchangeCertificate

    essaies aussi 

    Enable-ExchangeCertificate -confirm:$false


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi



    • Modifié M dakhama mardi 5 janvier 2021 14:42
    mardi 5 janvier 2021 14:25
  • Bonjour Samir155

    L'objet même de cette cmdlet est de changer le certificat utilisé par Exchange.

    Le prompt de confirmation est normal, mais tu peux t'en affranchir en ajoutant le paramètre -force (sans rien derriere).

    Si tu ne veux que tester la cmdlet sans réellement l'appliquer, il faut utiliser le paramètre commun -WhatIf (ça fait comme si, mais ça ne fait pas).

    Rien dans la doc en ligne (https://docs.microsoft.com/en-us/powershell/module/exchange/enable-exchangecertificate?view=exchange-ps) ne précise que le certificat est supprimé de la machine. Il n'est juste plus "bindé" au service (Exchange, IIS) auquel tu fais appel.Il est toujours présent sur la machine.

    Si c'est pour Exchange, avant de jouer cette cmdlet, je te dirais bien de jouer Get-ExchangeCertificate est de stocker le résultat dans une variable. Ainsi, tu pourras faire un roll-back avec Enable-ExchangeCertificate en lui passant le paramètre qui va bien et qui correspond au précédent certificat si jamais le besoin se présentait.

    Personnellement avant toute cmdlet de modification, je fais d'abord un Get et je stocke cela quelque part dans une var ou un fichier, puis mon set (ou Enable dans ton cas), puis de nouveau un Get afin de vérifier que j'ai bien au final ce que je voulais avoir. Et ça m'a évité bien des déboires à plusieurs reprises.

    Cordialement

    Olivier

    mardi 5 janvier 2021 15:45
  • Bonjour,

    Le -Force est un switch qui a juste pour but de "forcer" la commande. Ni plus ni moins. Il va effectuer ce que la CmdLet veut faire "sans se poser de question", sauf s'il y a un Mandatory quelque part, là il va pas aimer.

    Example:

    Remove-Item -Path xxxx -Recurse => Pop-Up ("êtes-vous sur de vouloir etc etc")

    Remove-Item -Path xxxx -Recurse -Force => Il effectue l'action. (vaut mieux être sûr)

    Si il y a un Mandatory:

    Remove-Item -Recurse => Pop-Up ("Veuillez entrer le path")

    Remove-Item -Recurse -Force => Error


    The key of learning is practice.


    lundi 11 janvier 2021 12:57
  • Salut, 

    oui le force c'est comme le confirme:$false ou $true tu n'auras pas de confirmation mais l'action sera éxecuté.

    la vrai combine est echon ou echo -n ou echo-no ou un truc du genre, mais à toi de faire un petit effort, car le comportement de echo change selon la commande, mais il envoie le non.

    précise ce que tu veux faire ou colle ton script, d'autres membre trouverons une autres méthode, car les scripts powershell ne fonctionnent pas de cette logique, une réponse fondé pour une ligne précise.


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi

    lundi 11 janvier 2021 13:11
  • Bonjour,

    "le force c'est comme le confirme:$false ou $true" => Non, s'il y a deux parametres ce n'est pas une coïncidence. Il y a un but précis. Le -Force agit comme le confirm, à la différence près qu'il overwrite les "protections" dont la CmdLet pourrait être soumises. (ex: write sur un read-only)

    "la vrai combine est echon ou echo -n ou echo-no ou un truc du genre" => il faut éviter de faire un mix Command Prompt/PowerShell. Ce n'est pas une mauvaise pratique à proprement parlé, mais le PowerShell sait largement faire ce que faire le Command Prompt puisqu'il fait plus. (Write-Output pour le echo notamment)

    "une réponse fondé pour une ligne précise." => Non, justement il n'y a pas qu'une seule solution pour une requête.

    Ce langage est basé sur le Framework .Net qui contient une panoplie de méthodes qui permettent de faire une multitude de chose de plein de manières différentes.



    The key of learning is practice.

    lundi 11 janvier 2021 13:26
  • Salut arnaud,

    je pense que tu n'as pas compris le fond de ma réponse, je ne suis pas entrain de lui expliqué comme tu fais, puisque le gars il nous donne pas le minimum des éléments ou une partie du script.

    et je pense que ce qui l'intéresse c'est comment répondre à une ligne de commande, alors que le scripting n'est pas fondé sur cette logique.

    le gars devra nous éclaircir un peu plus, ou plutôt lire tes réponse et lire un peu sur powershell.  

    moi franchement je préfère du WPF pour contourner ces petits problèmes 


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi

    lundi 11 janvier 2021 14:08
  • Salut M dakhama,

    Pas de souci, c'était pas contre toi. Comme tu le dis si bien, sans script... c'est très théorique.


    The key of learning is practice.

    lundi 11 janvier 2021 14:11
  • Tkt, je n'ai jamais dit que c'était contre moi, en plus nous somme dans un domaine technique et scientifique et ca fait toujours plaisir de lire et d'échanger avec des personnes de ton genre. 

    mais comme tu la constaté, le forum a perdu de sa crédibilité, les gens ne veulent ni lire ni testé, ils sont payé je sais pas comment, et ils viennent nous balancer des problèmes et réapparaissent des semaines après, pour dire tiens ca ne fonctionne pas.

    alors que le principe du forum c'est de s'entraider et d'apprendre des choses à travers les échanges.


    Dakhama Mehdi : Windows developper https://github.com/dakhama-mehdi

    lundi 11 janvier 2021 14:20
  • Bonjour Samir155,

    Plusieurs petites remarques :

    Remplacer

    $chemincertiftableau = @(Get-ChildItem -path "C:\Certificats\)" 

    par

    $chemincertiftableau = @(Get-ChildItem -path "C:\Certificats\") 

    Quand tu fais ton Import-ExchangeCertificate, tu vas chercher le certificat sur le serveur en cours de traitement

    "\\$computername\$modifchemin"

    A quel moment définis-tu $ModifChemin ? Ne pourrais-tu pas exécuter la même cmdlet en important le certificat depuis un Central Share ? Là tu dois être obligé de déposer le certificat sur la machine locale dans un share pour pouvoir utiliser ta cmdlet.

    Concernant le fonctionnement de Enable-ExchangeCertificate, comme son nom l'indique, c'est fait pour activer un certificat particulier (cela ne supprime pas l'ancien certificat, il n'est juste plus bindé dans Exchange). Si tu ne veux pas exécuter réellement la cmdlet, ajoute tout simplement le paramètre -WhatIf (ça fait comme si, mais ça fait pas :-) ... c'est super pratique pour les tests, sans tout changer ou casser). C'est un paramètre commun sur de très nombreuses cmdlets.

    Plus d'info sur sur la cmdlet : https://docs.microsoft.com/fr-fr/powershell/module/exchange/enable-exchangecertificate?view=exchange-ps

    Cordialement

    Olivier

    mardi 12 janvier 2021 15:31
  • Bonjour,

    Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés? Si les conseils vous ont aidé, veuillez marquer comme réponses les contributions pertinentes qui ont conduit à la solution.
    Si vous avez trouvé une autre solution, partagez-la avec la communauté afin que d'autres utilisateurs avec le même problème puissent profiter de cette solution.

    Merci d'avance!

    Cordialement,

    Mihaela


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    jeudi 4 février 2021 11:47