Question Kill de processus selon le nom d'utilisateur

Plus d'informations
il y a 10 ans 10 heures #21605 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

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

Plus d'informations
il y a 10 ans 8 heures #21610 par Laurent Dardenne
salut,
quelle(s) versions de Powershell utilises-tu ?

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 7 heures #21611 par MrBougaerreip
J'utilise la version 2.0 de l'ISE

EDIT : D'ailleurs je viens de me rendre compte que je suis bien en retard :whistle:

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 \&quot;GRP_SHR_FINANCE\&quot;
#Source : powershell-scripting.com/index.php?optio...id=5258&catid=14

PARAM (
[String]$Group
)

BEGIN{
$strFilter = \&quot;(&amp;(objectCategory=group)(name=\&quot; + $Group + \&quot;«»))\&quot;
$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(\&quot;LDAP://\&quot; + $DNGroup)
$arrMembers = @()
}
PROCESS{
If ($objGroup.objectclass[1] -eq 'group') {

$objGroup.Member | ForEach {
$objMember = new-object DirectoryServices.DirectoryEntry(\&quot;LDAP://\&quot; + $_)
If ($objMember.ObjectClass[1] -eq 'group') {
$arrMembers += Get-VaGroupMembers -Group ($objMember.cn).ToString()
}
Else {
$arrMembers += ($objMember.SamAccountName).ToString()
}
}
}
Else {
Write-Host -ForegroundColor Red \&quot;$Group n'est pas un groupe!\&quot;
}
}
END{
Return $arrMembers
}
}

#Appel de la fonction, stockage des membres dans le tableau \&quot;$arrMembers\&quot;
$arrMembers = Get-VAGroupMembers -group \&quot;****VOTRE_GROUPE****\&quot;

#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
Propulsé par Kunena