Question Récupérer un résultat de WMI pour le reformater

Plus d'informations
il y a 11 ans 4 mois #18419 par Cyrille CHAGNON
Bonjour,

J'ai récupéré ce code ci, pour récupérer les noms d'utilisateurs connectés à un programme:
[code:1]$ResultListProcess = Get-WmiObject -Query \"Select * from Win32_Process where name = 'Calc.exe'\" | Select @{Label='Users Details :';Expression={$_.GetOwner().User}} [/code:1]

Ceci fonctionne bien, ça me renvoie un résultat du type:
Users details:
User1
User2
User3
User4

Sauf que je n'ai besoin que de User1 à User4 sans entête, et surtout à la suite (c'est pour afficher dans un log) comme suit:
Timestamp 4 user1, User2, User3, User4

J'ai bricolé des trucs sauvages (que je n'ose vous montrer --- c'est horrible :blink: ) à partir d'un résultat que je récupère dans une chaine grâce à out-string (ie:
[code:1]$ResultListProcess = Get-WmiObject -Query \"Select * from Win32_Process where name = 'Calc.exe'\" | Select @{Label='Users Details :';Expression={$_.GetOwner().User}} | out-string[/code:1]

et je fais des trim, des replace, mais ça me donne pas le résultat escompté, car il y a de nombreux retour chariot, des espaces entre userX et ce retour chariot, etc... :S

J'ai donc plusieurs questions:
a) Est-ce que c'est pertinent de faire un out-string, puis de manipuler ensuite ce gros bloc, qui est plus un texte sur plusieurs lignes ?

b) J'ai pensé utiliser get-content, vous en pensez quoi ?

c) Dans cette ligne Select @{Label='Users Details :';Expression={$_.GetOwner().User}}, je n'ai pas pu me débarrasser du Label, comment puis demander directement un résultat d'une expression ?

Merci de votre aide et éclairages !

Cyrille

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

Plus d'informations
il y a 11 ans 4 mois #18422 par Laurent Dardenne
Salut,
Cyrille999 écrit:

a) Est-ce que c'est pertinent de faire un out-string, puis de manipuler ensuite ce gros bloc, qui est plus un texte sur plusieurs lignes ?

Oui si le résultat est au RDV, ensuite est-ce efficient...
Cyrille999 écrit:

b) J'ai pensé utiliser get-content, vous en pensez quoi ?

Joker.
Cyrille999 écrit:

je n'ai pas pu me débarrasser du Label, comment puis demander directement un résultat d'une expression ?

Select-Object a besoin d'un nom de propriété.

Une autre approche :
[code:1]
$ofs=','
$ResultListProcess = Get-WmiObject -Query \"Select * from Win32_Process where name = 'Calc.exe'\" | % {$_.GetOwner().User}
\"Log : $ResultListProcess\"
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 4 mois #18424 par Cyrille CHAGNON
Bonjour Laurent,

Merci de tes réponses, même si celle-ci \"joker\" n'est pas digne de toi !!!!

Qu'est-ce que ça fait:
$ofs=','
$ResultListProcess = Get-WmiObject -Query \"Select * from Win32_Process where name = 'Calc.exe'\" | % {$_.GetOwner().User}
\"Log : $ResultListProcess\"


Comment la variable $ofs se lie au résultat et formate la liste des users ?

Merci d'avance de tes explications !

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

Plus d'informations
il y a 11 ans 4 mois #18425 par Laurent Dardenne
Cyrille999 écrit:

Comment la variable $ofs se lie au résultat et formate la liste des users ?

C'est l'inverse, c'est le mécanisme de formatage/substitution qui l'utilise :

Output Field Separator. Specifies the character that separates the
elements of an array when the array is converted to a string.

Valid values: Any string.
Default: Space

By default, the $OFS variable does not exist and the output file
separator is a space, but you can add this variable and set it to
any string.


Tutoriels PowerShell

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

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