Question
Kill de processus selon le nom d'utilisateur
- MrBougaerreip
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 10 ans 10 heures #21605
par MrBougaerreip
Kill de processus selon le nom d'utilisateur a été créé par MrBougaerreip
Bonjour,
Je me tourne vers la communauté powershell-scripting pour un soucis que j'ai actuellement.
Dans un soucis d'optimisation de nos serveurs, je cherche un moyen d'effectuer les tâches suivantes :
1. Lister les membres d'un groupe quelconque dans un tableau url=http://powershell-scripting.com/index.php?option=com_joomlaboard&Itemid=76&func=view&id=5258&catid=14]FAIT[/url
2. Réaliser une boucle qui supprimerait 5 processus, à condition qu'ils n'appartiennent à aucun des utilisateurs du tableau.
En gros, ma boucle passerait sur tous les processus dont j'aurais renseigné les noms, vérifierait qu'ils n'appartiennent pas aux utilisateurs dudit groupe, puis les killerait.
Est-ce que quelqu'un saurait me renseigner sur une quelconque technique pour effectuer ceci ?
Les processus à killer sont les suivants :
[code:1]
Stop-Process -processname concentr
Stop-Process -processname wfcrun32
Stop-Process -processname redirector
Stop-Process -processname SelfServicePlugin
Stop-Process -processname Receiver
[/code:1]
En résumé, il faudrait que la boucle agisse comme suit :
[code:1]
Si *processus* appartient à *utilisateur dans le groupe* :
-
Sinon :
Stop-Process -processname *processus*
[/code:1]
Cordialement, MrBougaerreip
Message édité par: MrBougaerreip, à: 22/03/16 10:12
Message édité par: MrBougaerreip, à: 22/03/16 10:14<br><br>Message édité par: MrBougaerreip, à: 22/03/16 10:15
Je me tourne vers la communauté powershell-scripting pour un soucis que j'ai actuellement.
Dans un soucis d'optimisation de nos serveurs, je cherche un moyen d'effectuer les tâches suivantes :
1. Lister les membres d'un groupe quelconque dans un tableau url=http://powershell-scripting.com/index.php?option=com_joomlaboard&Itemid=76&func=view&id=5258&catid=14]FAIT[/url
2. Réaliser une boucle qui supprimerait 5 processus, à condition qu'ils n'appartiennent à aucun des utilisateurs du tableau.
En gros, ma boucle passerait sur tous les processus dont j'aurais renseigné les noms, vérifierait qu'ils n'appartiennent pas aux utilisateurs dudit groupe, puis les killerait.
Est-ce que quelqu'un saurait me renseigner sur une quelconque technique pour effectuer ceci ?
Les processus à killer sont les suivants :
[code:1]
Stop-Process -processname concentr
Stop-Process -processname wfcrun32
Stop-Process -processname redirector
Stop-Process -processname SelfServicePlugin
Stop-Process -processname Receiver
[/code:1]
En résumé, il faudrait que la boucle agisse comme suit :
[code:1]
Si *processus* appartient à *utilisateur dans le groupe* :
-
Sinon :
Stop-Process -processname *processus*
[/code:1]
Cordialement, MrBougaerreip
Message édité par: MrBougaerreip, à: 22/03/16 10:12
Message édité par: MrBougaerreip, à: 22/03/16 10:14<br><br>Message édité par: MrBougaerreip, à: 22/03/16 10:15
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 8 heures #21610
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Kill de processus selon le nom d'utilisateur
salut,
quelle(s) versions de Powershell utilises-tu ?
quelle(s) versions de Powershell utilises-tu ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- MrBougaerreip
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 10 ans 7 heures #21611
par MrBougaerreip
Réponse de MrBougaerreip sur le sujet Re:Kill de processus selon le nom d'utilisateur
J'utilise la version 2.0 de l'ISE
EDIT : D'ailleurs je viens de me rendre compte que je suis bien en retard
EDIT 2 : Après mise à jour de mon ISE, j'ai fini mon script, il fonctionne parfaitement. Je le pose ici pour ceux qui se poseraient la question :
[code:1]
#Stocke le nom d'utilisateur dans une variable
$userName = [Environment]::UserName
Function Get-VAGroupMembers
{
#Fonction qui retourne tous les users d'un groupe et ces sousgroupes.
#La fonction retourne un array
#Utilisation: Get-VAGroupMembers -Group \"GRP_SHR_FINANCE\"
#Source : powershell-scripting.com/index.php?optio...id=5258&catid=14
PARAM (
[String]$Group
)
BEGIN{
$strFilter = \"(&(objectCategory=group)(name=\" + $Group + \"«»))\"
$objAD = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher -Argumentlist $objAD,$strFilter
$objGroup = $objSearcher.FindOne()
$DNGroup = ($objGroup.GetDirectoryEntry()).DistinguishedName
$objGroup = New-Object DirectoryServices.DirectoryEntry(\"LDAP://\" + $DNGroup)
$arrMembers = @()
}
PROCESS{
If ($objGroup.objectclass[1] -eq 'group') {
$objGroup.Member | ForEach {
$objMember = new-object DirectoryServices.DirectoryEntry(\"LDAP://\" + $_)
If ($objMember.ObjectClass[1] -eq 'group') {
$arrMembers += Get-VaGroupMembers -Group ($objMember.cn).ToString()
}
Else {
$arrMembers += ($objMember.SamAccountName).ToString()
}
}
}
Else {
Write-Host -ForegroundColor Red \"$Group n'est pas un groupe!\"
}
}
END{
Return $arrMembers
}
}
#Appel de la fonction, stockage des membres dans le tableau \"$arrMembers\"
$arrMembers = Get-VAGroupMembers -group \"****VOTRE_GROUPE****\"
#Boucle qui passe sur le tableau entier
for ($i=0; $i -lt $arrMembers.length; $i++)
{
#Vérifie si le nom d'utilisateur correspond à un nom dans le tableau
if([Environment]::UserName -eq $arrMembers[$i])
{
#Si le nom correspond, stoppe le script
Exit
}
}
#Si le nom n'est pas présent dans le tableau, supprime uniquement les processus de l'utilisateur
Get-Process VOTRE/VOS_PROCESSUS -IncludeUserName | Where UserName -match $userName | Stop-Process
Get-Process VOTRE/VOS_PROCESSUS -IncludeUserName | Where UserName -match $userName | Stop-Process
Get-Process VOTRE/VOS_PROCESSUS -IncludeUserName | Where UserName -match $userName | Stop-Process
[/code:1]
Message édité par: MrBougaerreip, à: 22/03/16 16:57<br><br>Message édité par: MrBougaerreip, à: 22/03/16 16:58
EDIT : D'ailleurs je viens de me rendre compte que je suis bien en retard
EDIT 2 : Après mise à jour de mon ISE, j'ai fini mon script, il fonctionne parfaitement. Je le pose ici pour ceux qui se poseraient la question :
[code:1]
#Stocke le nom d'utilisateur dans une variable
$userName = [Environment]::UserName
Function Get-VAGroupMembers
{
#Fonction qui retourne tous les users d'un groupe et ces sousgroupes.
#La fonction retourne un array
#Utilisation: Get-VAGroupMembers -Group \"GRP_SHR_FINANCE\"
#Source : powershell-scripting.com/index.php?optio...id=5258&catid=14
PARAM (
[String]$Group
)
BEGIN{
$strFilter = \"(&(objectCategory=group)(name=\" + $Group + \"«»))\"
$objAD = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher -Argumentlist $objAD,$strFilter
$objGroup = $objSearcher.FindOne()
$DNGroup = ($objGroup.GetDirectoryEntry()).DistinguishedName
$objGroup = New-Object DirectoryServices.DirectoryEntry(\"LDAP://\" + $DNGroup)
$arrMembers = @()
}
PROCESS{
If ($objGroup.objectclass[1] -eq 'group') {
$objGroup.Member | ForEach {
$objMember = new-object DirectoryServices.DirectoryEntry(\"LDAP://\" + $_)
If ($objMember.ObjectClass[1] -eq 'group') {
$arrMembers += Get-VaGroupMembers -Group ($objMember.cn).ToString()
}
Else {
$arrMembers += ($objMember.SamAccountName).ToString()
}
}
}
Else {
Write-Host -ForegroundColor Red \"$Group n'est pas un groupe!\"
}
}
END{
Return $arrMembers
}
}
#Appel de la fonction, stockage des membres dans le tableau \"$arrMembers\"
$arrMembers = Get-VAGroupMembers -group \"****VOTRE_GROUPE****\"
#Boucle qui passe sur le tableau entier
for ($i=0; $i -lt $arrMembers.length; $i++)
{
#Vérifie si le nom d'utilisateur correspond à un nom dans le tableau
if([Environment]::UserName -eq $arrMembers[$i])
{
#Si le nom correspond, stoppe le script
Exit
}
}
#Si le nom n'est pas présent dans le tableau, supprime uniquement les processus de l'utilisateur
Get-Process VOTRE/VOS_PROCESSUS -IncludeUserName | Where UserName -match $userName | Stop-Process
Get-Process VOTRE/VOS_PROCESSUS -IncludeUserName | Where UserName -match $userName | Stop-Process
Get-Process VOTRE/VOS_PROCESSUS -IncludeUserName | Where UserName -match $userName | Stop-Process
[/code:1]
Message édité par: MrBougaerreip, à: 22/03/16 16:57<br><br>Message édité par: MrBougaerreip, à: 22/03/16 16:58
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Kill de processus selon le nom d'utilisateur