Question Questions de caractères...et de Winget à distance

Plus d'informations
il y a 2 mois 7 heures #34050 par Pada-Wan888
Bonjour à tous,
Je débute avec PowerShell mais ça fait quelques heures que je cherche une solution à mes problèmes...
Objectif : Mettre à jour les applications de PCs du domaine via Winget et Invoke-command :

Voici ce que je mets dans ma console :
"$computer = "PC-NAME"
$session = New-PSSession -ComputerName $computer -Credential Domain\UserWithRights
Invoke-Command -Session $session -ScriptBlock {winget upgrade --all --accept-source-agreements --accept-package-agreements} "

et voici ce que j'obtiens :

" -
   \
   |                                                                                                                    

  ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  1024 KB / 4.89 MB
  ████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  2.00 MB / 4.89 MB
  ██████████████████▒▒▒▒▒▒▒▒▒▒▒▒  3.00 MB / 4.89 MB
  ████████████████████████▒▒▒▒▒▒  4.00 MB / 4.89 MB
  ██████████████████████████████  4.89 MB / 4.89 MB                                                                                                           
  â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’  0%
  â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’  0%
  ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  1024 KB / 4.89 MB
  ████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  2.00 MB / 4.89 MB
  ██████████████████▒▒▒▒▒▒▒▒▒▒▒▒  3.00 MB / 4.89 MB
  ████████████████████████▒▒▒▒▒▒  4.00 MB / 4.89 MB
  ██████████████████████████████  4.89 MB / 4.89 MB
                                                                                                                      
  â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’  0%
  â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’â–’  0%
                                                                                                                        
   -
   \
   |
                                                                                                                        
Échec lors de la recherche de la source : winget
Une erreur inattendue s'est produite lors de l'exécution de la commande :
0x8a15000f : Data required by the source is missing"

1)Question 1 : Pourquoi j'obtiens ces caractères spéciaux et comment faire pour ne plus avoir cela ?

2)Question 2 : Pourquoi cette erreur ? J'ai testé la commande "winget source list" suite à avoir rentré "Enter-Pssession -ComputerName PC-NAME" et j'obtiens pourtant :
"Nom     Argument
msstore storeedgefd.dsx.mp.microsoft.com/v9.0
winget  cdn.winget.microsoft.com/cache"

En vous remerciant par avance de vos pistes et réponses.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 mois 6 heures #34051 par Arnaud Petitjean
Bonjour Padawan,

Sois le bienvenu dans le forum de notre communauté PowerShell ! ;-) Merci d'aller faire un tour dans le forum Qui êtes-vous PowerShelleurs ? pour te présenter :-).

Question 1:
C'est clairement un problème d'encodage de caractères... Winget, je n'ai pas de certitude mais Winget étant récent et il a probablement été pensé pour PowerShell 7 plus que pour Windows PowerShell 5.1. Il est possible qu'il émette ses données en Unicode UTF-8 alors que PowerShell 5.1 fonctionne nativement en UTF-16.
Pour en avoir la certitude, il faudrait que tu installes PowerShell 7 si tu peux sur ton client et que tu retentes ta commande afin de voir si cela change quelque chose.
Quoiqu'il en soit, ce n'est qu'un problème d'affichage et ce n'est absolument pas grave.

Question 2 : 
C'est plutôt étrange... Pourrais-tu essayer d'exécuter la commande "winget upgrade --all --accept-source-agreements --accept-package-agreements"  localement sur ta machine distante avec les 2 techniques ci-après :
  • En étant connecté en RDP sur ta machine
  • Via Enter-PSSession
En fonction des résultats, on avisera ;-).

Arnaud
 

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Les utilisateur(s) suivant ont remercié: Pada-Wan888

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 4 semaines #34054 par Pada-Wan888
Tout d'abord, MERCI Arnaud pour avoir créé cet espace et d'avoir répondu à mon message.
Pour la question 1, j'ai bien installé PowerShell 7.4.1 sur la machine client mais lorsque je fais $PSVersionTable suite à Enter-PSSession sur la machine cible, j'ai toujours la version PSVersion 5.1.22621.2506, c'est comme si Powershell 7.4.1 était installé "à côté" de Windows.PowerShell 5.1 et que la machine cible utilisait cette version "par défaut"....
Est-ce qu'il faut désinstaller la version 5.1 ou bien faut-il spécifier un paramètre pour utiliser PowerShell 7.4.1 (ou pour le mettre par défaut) ?

Concernant la question 2 : J'ai donc fait les 2 tests et voici les résultats :
-Via Enter-PSSession : même résutat que par invoke-command
-Via RDP cela fonctionne bien

Encore merci pour le temps accordé !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 4 semaines #34055 par Arnaud Petitjean
Salut Padawan,

Tout d'abord, MERCI Arnaud pour avoir créé cet espace et d'avoir répondu à mon message.

Avec plaisir, le forum est fait pour cela ;-)

Pour la question 1, j'ai bien installé PowerShell 7.4.1 sur la machine client mais lorsque je fais $PSVersionTable suite à Enter-PSSession sur la machine cible, j'ai toujours la version PSVersion 5.1

Je comprends mieux d'où vient ton problème d'encodage de caractères. C'est assez typique lorsqu'on mixe PowerShell 5 et 7. Car comme je te le disais dans ma précédente réponse, la console PowerShell 5 travaille en Unicode UTF 16 BE avec BOM, tandis que la console PowerShell 7 travaille en Unicode UTF 8 sans BOM (oui, c'est un peu technique l'encodage des fichiers et des caractères).
Donc, pour revenir à ton problème no1, tout devrait bien fonctionner si tu utilises PowerShell 5.1 sur ton client. Car lorsque tu établis une session Remote PowerShell (via Invoke-Command), par défaut ça démarre un process PowerShell 5.1. C'est la raison pour laquelle lorsque tu regardes la version de PowerShell, tu obtiens 5.1.xxx.
Après, il est aussi possible de faire en sorte que ta session distante démarre un process PowerShell 7. Mais cela demande un peu de configuration et aussi que PowerShell 7 soit installé sur ton serveur. Voilà pour ce qui concerne ta question No1.

Concernant ta question numéro 2, je te remercie d'avoir fait ces tests car ça rend les choses beaucoup plus claires pour moi.

Si ta commande Winget upgrade fonctionne bien localement lorsque tu te connectes sur le serveur en RDP et qu'elle échoue via une session Remote PowerShell, j'aurais tendance à penser que l'on a affaire avec un problème de permissions et en particulier de double-saut (à lire : learn.microsoft.com/en-us/powershell/scr...-remoting-second-hop ).
Cela étant dit, ça me surprendrait que ça vienne de là...

En faisant une petite recherche Google, j'ai trouvé quelqu'un qui a le même souci que toi et qui l'a fait remonter à Microsoft :  github.com/microsoft/winget-cli/issues/3068

Peut-être que ça va t'aider ? 
Aussi j'ai vu que Microsoft avait fait une nouvelle release de Winget. Tu devrais sûrement la faire et réessayer.

Bon courage et tiens nous au courant.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 4 semaines #34056 par Pada-Wan888
Concernant la Question 2, j'ai suivi le lien que tu avais mentionné ( github.com/microsoft/winget-cli/issues/3068 ) et effectivement, en rentrant la commande (Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.Winget.Source_8wekyb3d8bbwe comme indiqué dans le fil de discussion du lien) cela fonctionne correctement désormais !
La commande "Invoke-Command -Session $session -ScriptBlock {winget upgrade --all --accept-source-agreements --accept-package-agreements} " fonctionne CORRECTEMENT !!!! Top, Merci !!

Par contre désormais, je tente de résoudre ma question 1, à la laquelle, je n'ai pas encore trouvé d'issue...
J'ai tenté de lancer la commande "invoke-command" depuis la machine cliente (d'où je lance la commande) avec Windows.Powershell 5.1 et aussi avec PowerShell 7.4.1 et cela fait pareils (problème de caractères)
Sur la machine Serveur (Cible), j'ai installé PowerShell 7.4.1, mais je ne sais pas comment faire pour que mon client interagisse avec le PowerShell 7.4.1 de mon serveur (cible) (si c'est ça la piste à privilégier selon vous bien sûr ...).

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 mois 4 semaines #34057 par Arnaud Petitjean
Cool si nous avons réussi à résoudre le première problème . A présent attaquons-nous au second.

Pour activer le mécanisme de "Remote PowerShell 7", on devrait plutôt dire "effectuer une connexion WinRM sur le endpoint PowerShell 7", il y a deux choses à faire :
  1. La première, s'assurer que le serveur sur lequel tu as installé PowerShell 7 soit en écoute des connexions WinRM entrantes pour PowerShell 7. Pour cela, sur ton serveur, ouvre la console PowerShell 7 en tant qu'administrateur et tape la commande suivante : Enable-PSRemoting
  2. La seconde, sur ton client, lorsque tu utilises Invoke-Command, New-PSSession ou Enter-PSSession, tu dois préciser le nom du point de terminaison WinRM (endpoint) sur lequel tu souhaites te connecter. Cela se fait avec le paramètre -ConfigurationName Powershell.7

Exemple : 
Invoke-Command -ComputerName $myServer -ScriptBlock {winget upgrade --all --accept-source-agreements --accept-package-agreements} -ConfigurationName Powershell.7


Si tu crées une session avec New-PSSession, c'est à alors à cette dernière commande qu'il faudra préciser sur quelle configuration tu souhaites te connecter. Par défaut, PowerShell te connecte sur celle nommée Windows.PowerShell qui représente un processus PowerShell 5.1.

Ensuite j'espère que cela résoudra ton problème de caractères bizarres. Sinon là, je sèche...

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.082 secondes
Propulsé par Kunena