Question trouver le (les) postes d'un utilisateur

Plus d'informations
il y a 11 ans 5 jours #14600 par Matthew BETTON
Salut Laurent,

J'avais posté il y a quelques temps dans ce forum des informations au sujet de la récupération, à distance, des comptes connectés à des machines Windows.

Ici :

Richard Lazaro écrit:

(par contre, je ne sais pas comment récupérer les sessions ouvertes.)


Bonjour,

Il existe plusieurs solutions dont certaines sont expliquées ici : Quick-Hits: Find currently logged on users

J'avais apprécié la seconde méthode (lister les process \"explorer.exe\" et déterminer les propriétaires de ces process) ainsi que la quatrième ( module \"Terminal Services\" , développé par Shay Levi).

:)

@ +

Matthew


Voir notamment

J'avais apprécié la seconde méthode (lister les process \"explorer.exe\" et déterminer les propriétaires de ces process)


Voir la réponse de antonin38 dans le post que je mentionne...

Avec PsLoggedon.exe, tu peux en effet récupérer ces informations, mais quid ensuite de la récupération des informations ? Informations non pertinentes, qui ne sont pas récupérées sous forme d'objet, et donc difficilement exploitables dans un script PowerShell :(

@+

Matthew

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

Plus d'informations
il y a 11 ans 5 jours #14601 par Matthew BETTON
Une fonction qui permet de récupérer les sessions, à distance :

[code:1]# Retrieve the logged on user for a Server
Function Get-ServerSessions {
param(
[parameter(Mandatory=$true, ValueFromPipeline=$true)]
[String]$ComputerName,
[parameter(Mandatory=$false)]
[System.Management.Automation.PSCredential]$Credential = [System.Management.Automation.PSCredential]::Empty
)

process{
try{
$SessionsList = $proc = $null
$proc = Get-WmiObject -Class win32_process -ComputerName $ComputerName -Credential $Credential -Filter \"Name = 'explorer.exe'\" -ErrorAction Stop

$SessionsList = @()

ForEach ($p in $proc) {
try{
$SessionsList += \"$(($p.GetOwner()).Domain)\$(($p.GetOwner()).User)\"
}
catch{
Write-Debug \"Impossible de charger le propriétaire sur $p\"
}
}
}
catch{
Write-Error \"Erreur WMI '$ComputerName' / 'Get-ServerSessions' : $($_.Exception.Message)\"
}
return $SessionsList
}
}[/code:1]

Exemples :

[code:1]PS> \"Machine1\", \"Machine2\" | Get-ServerSessions [/code:1]

[code:1]PS> $Credential = Get-Credential
PS> \"Machine1\", \"Machine2\" | Get-ServerSessions -Credential $Credential[/code:1]

[code:1]PS> Get-ServerSessions Machine1, Machine2, Machine3[/code:1]

Fonction à renommer... Elle fonctionne également pour des postes de travail ;)

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

Plus d'informations
il y a 11 ans 5 jours #14602 par Matthew BETTON
Allez hop, une mise à jour de la fonction :

[code:1] # Retrieve the logged on user for a Server
Function Get-ComputerNameSessions {
param(
[parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[String]$ComputerName,
[parameter(Mandatory=$false)]
[System.Management.Automation.PSCredential]$Credential = [System.Management.Automation.PSCredential]::Empty
)

process{
try{
$SessionsList = $proc = $null
$proc = Get-WmiObject -Class win32_process -ComputerName $ComputerName -Credential $Credential -Filter \"Name = 'explorer.exe'\" -ErrorAction Stop

$SessionsList = @()

ForEach ($p in $proc) {
try{
$SessionsList += New-Object PSObject -Property @{ComputerName=$ComputerName;UserName=\"$(($p.GetOwner()).Domain)\$(($p.GetOwner()).User)\"}
}
catch{
Write-Debug \"Impossible de charger le propriétaire sur $p\"
}
}
}
catch{
Write-Error \"Erreur WMI '$ComputerName' / 'Get-ServerSessions' : $($_.Exception.Message)\"
}
return $SessionsList
}
}

Get-ComputerNameSessions TORONTO[/code:1]

[code:1]PS> Get-ComputerNameSessions TORONTO
ComputerName UserName

TORONTO TORONTO\Mat

[/code:1]<br><br>Message édité par: Matthew BETTON, à: 18/04/13 13:15

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

Plus d'informations
il y a 11 ans 5 jours #14603 par laucaz
pardon Matthew mais je ne comprend pas

Fonction à renommer...


Pourquoi ?

Cela dit j'ai renommée la fonction dans le fichier .PS1 et nommé le fichier PS1 \&quot;cherche.ps1\&quot;.

quand le lance la commande

[code:1]PS&gt; cherche.ps1 pwf21204[/code:1]

je reviens direct sur le prompt :S

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

Plus d'informations
il y a 11 ans 5 jours #14604 par Matthew BETTON
titou4 écrit:

pardon Matthew mais je ne comprend pas

Fonction à renommer...


Pourquoi ?


Pour que cela \&quot;colle\&quot; avec son utilisation... Voir la dernière fonction que j'ai posté (une mise à jour).

Le but principal étant pour l'utilisateur de la Cmdlet (fonction développée) sache rapidement de quoi il s'agit... Cela rend PowerShell plus agréable et plus simple à utiliser :P


Cela dit j'ai renommée la fonction dans le fichier .PS1 et nommé le fichier PS1 \&quot;cherche.ps1\&quot;.

quand le lance la commande

[code:1]PS&gt; cherche.ps1 pwf21204[/code:1]

je reviens direct sur le prompt :S


Ajoute cette ligne à la fin du script (pas à la fin de la fonction) :

[code:1]Export-ModuleMember -Function Get-ComputerNameSession[/code:1]

ou

[code:1]Export-ModuleMember -Function *[/code:1]

Renomme ensuite 'cherche.ps1' en 'Cherche.psm1' et charge le module :

[code:1]Import-Module .\Cherche.psm1[/code:1]

Saisi ensuite la ligne suivante dans la même console :

[code:1]Get-ComputerNameSession pwf21204[/code:1]

Tu peux ajouter le chargement du module via ton profil PowerShell, afin qu'il soit automatiquement chargé lors de chaque lancement d'une console.

The Windows PowerShell Profile

Customizing your PowerShell Profile

Une fonction faisant partie d'un script (.ps1), ne peut pas être appelée à l'extérieur du script, à moins d'utiliser le \&quot;dot sourcing\&quot; :

[code:1]PS&gt; . .\cherche.ps1
PS&gt; Get-ComputerNameSession pwf21204
[/code:1]

Bonus: “Dot Sourcing” a Script

Bien entendu, dans ces exemples j'indique [code:1]\&quot;.\cherche.ps1\&quot;[/code:1], en admettant que tu te trouves déjà dans le répertoire contenant le script. S'il est dans [code:1]\&quot;D:\Scripts\&quot;[/code:1], alors il est peut être préférable de préciser le chemin complet [code:1]\&quot;D:\Scripts\cherche.ps1\&quot;[/code:1], et pas un chemin relatif ...

Pour l'exemple, cela donnerait :

[code:1]PS&gt; . D:\Scripts\cherche.ps1
PS&gt; Get-ComputerNameSession pwf21204
[/code:1]<br><br>Message édité par: Matthew BETTON, à: 18/04/13 14:16

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

Plus d'informations
il y a 11 ans 5 jours #14605 par laucaz
yes ça marche :-))))

Merci Matthew :)

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

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