Question
trouver le (les) postes d'un utilisateur
- Matthew BETTON
- Hors Ligne
- Membre platinium
- Messages : 968
- Remerciements reçus 0
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.
- Matthew BETTON
- Hors Ligne
- Membre platinium
- Messages : 968
- Remerciements reçus 0
[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.
- Matthew BETTON
- Hors Ligne
- Membre platinium
- Messages : 968
- Remerciements reçus 0
[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.
- laucaz
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 48
- Remerciements reçus 0
Fonction à renommer...
Pourquoi ?
Cela dit j'ai renommée la fonction dans le fichier .PS1 et nommé le fichier PS1 \"cherche.ps1\".
quand le lance la commande
[code:1]PS> cherche.ps1 pwf21204[/code:1]
je reviens direct sur le prompt
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
- Messages : 968
- Remerciements reçus 0
pardon Matthew mais je ne comprend pas
Fonction à renommer...
Pourquoi ?
Pour que cela \"colle\" 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
Cela dit j'ai renommée la fonction dans le fichier .PS1 et nommé le fichier PS1 \"cherche.ps1\".
quand le lance la commande
[code:1]PS> cherche.ps1 pwf21204[/code:1]
je reviens direct sur le prompt
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 \"dot sourcing\" :
[code:1]PS> . .\cherche.ps1
PS> Get-ComputerNameSession pwf21204
[/code:1]
Bonus: “Dot Sourcing” a Script
Bien entendu, dans ces exemples j'indique [code:1]\".\cherche.ps1\"[/code:1], en admettant que tu te trouves déjà dans le répertoire contenant le script. S'il est dans [code:1]\"D:\Scripts\"[/code:1], alors il est peut être préférable de préciser le chemin complet [code:1]\"D:\Scripts\cherche.ps1\"[/code:1], et pas un chemin relatif ...
Pour l'exemple, cela donnerait :
[code:1]PS> . D:\Scripts\cherche.ps1
PS> 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.
- laucaz
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 48
- Remerciements reçus 0
Merci Matthew
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- trouver le (les) postes d'un utilisateur