Question
Lister les groupes locaux d'un serveur
- Phil'z Edward
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 45
- Remerciements reçus 0
il y a 13 ans 2 mois #14357
par Phil'z Edward
Lister les groupes locaux d'un serveur a été créé par Phil'z Edward
Bonjour,
J'ai deux problèmes avec mon script, je voudrais :
-Qu'il m'affiche juste les groupes locaux (c'est à dire les groupes créés par un administrateur, et non les groupes BUILTIN')
-Qu'il renvoie les resultats dans un fichier csv (Dans mon script, il ne renvoie pas les informations affichées à l'écran)
[code:1]
$computerName = Read-Host 'Enter computer name or press <Enter> for localhost'
if ($computerName -eq \"\"«») {$computerName = \"$env:computername\"}
$computer = [ADSI]\"WinNT://$computerName,computer\"
$groups = $computer.psbase.Children | Where-object { $_.psbase.schemaclassname -eq 'group' }
foreach ($group in $groups)
{
$users = $group.psbase.invoke(\"Members\"«»)
$group.name
write-host \"
\"
if ($users -ne $null)
{
foreach ($user in $users)
{
$user.GetType().InvokeMember(\"Name\",\"GetProperty\",$null,$user,$null)
}
}
else
{
write-host \"
EMPTY
\" -foreground \"red\"
}
write-host \"
\"
write-host \"\"
$groups | Export-Csv C:\temp\Grouploc-user.csv -NoTypeInformation
}
[/code:1]
Merci pour votre aide
J'ai deux problèmes avec mon script, je voudrais :
-Qu'il m'affiche juste les groupes locaux (c'est à dire les groupes créés par un administrateur, et non les groupes BUILTIN')
-Qu'il renvoie les resultats dans un fichier csv (Dans mon script, il ne renvoie pas les informations affichées à l'écran)
[code:1]
$computerName = Read-Host 'Enter computer name or press <Enter> for localhost'
if ($computerName -eq \"\"«») {$computerName = \"$env:computername\"}
$computer = [ADSI]\"WinNT://$computerName,computer\"
$groups = $computer.psbase.Children | Where-object { $_.psbase.schemaclassname -eq 'group' }
foreach ($group in $groups)
{
$users = $group.psbase.invoke(\"Members\"«»)
$group.name
write-host \"
\"
if ($users -ne $null)
{
foreach ($user in $users)
{
$user.GetType().InvokeMember(\"Name\",\"GetProperty\",$null,$user,$null)
}
}
else
{
write-host \"
EMPTY
\" -foreground \"red\"
}
write-host \"
\"
write-host \"\"
$groups | Export-Csv C:\temp\Grouploc-user.csv -NoTypeInformation
}
[/code:1]
Merci pour votre aide
Connexion ou Créer un compte pour participer à la conversation.
- Phil'z Edward
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 45
- Remerciements reçus 0
il y a 13 ans 2 mois #14371
par Phil'z Edward
Réponse de Phil'z Edward sur le sujet Re:Lister les groupes locaux d'un serveur
Salut,
Personne n'a une idée???
Merci
Personne n'a une idée???
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 13 ans 2 mois #14377
par Philippe
Réponse de Philippe sur le sujet Re:Lister les groupes locaux d'un serveur
salut PE2012
Pour commencé, je ne crois pas que lors puisse filtré la liste des groupes local ou AD sans les groupes par defaults du systemes mais je vers cherché un peu.
Je te conseil d'utilisé un nommage specifique pour les groupes que tu crée, tu type \"GR_fichiers du service compta\".
Comme ca dans ta recherche de groupe tu met un filtre sur \"GR_*\".
Apres ton script ne fait que ce que tu lui demande (mettre dans le fichier \"grouploc-user.csv\" la liste des groupes et rien d'autre (pas les utilisateurs).
[code:1]$groups | Export-Csv C:\temp\Grouploc-user.csv -NoTypeInformation[/code:1]
Crée une structure par exemple dans laquelle tu met tes users par groups et ensuite tu enregrite cette structure.
Des que j'ai un peu de temps, je reviens vers toi pour les groupes et regarder plus pres ton script.
Pour commencé, je ne crois pas que lors puisse filtré la liste des groupes local ou AD sans les groupes par defaults du systemes mais je vers cherché un peu.
Je te conseil d'utilisé un nommage specifique pour les groupes que tu crée, tu type \"GR_fichiers du service compta\".
Comme ca dans ta recherche de groupe tu met un filtre sur \"GR_*\".
Apres ton script ne fait que ce que tu lui demande (mettre dans le fichier \"grouploc-user.csv\" la liste des groupes et rien d'autre (pas les utilisateurs).
[code:1]$groups | Export-Csv C:\temp\Grouploc-user.csv -NoTypeInformation[/code:1]
Crée une structure par exemple dans laquelle tu met tes users par groups et ensuite tu enregrite cette structure.
Des que j'ai un peu de temps, je reviens vers toi pour les groupes et regarder plus pres ton script.
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 13 ans 2 mois #14378
par Philippe
Réponse de Philippe sur le sujet Re:Lister les groupes locaux d'un serveur
de retour
pour la liste des groupes non systemes tu doit regarde le SID. Soit dans ton script : $group.psbase.Properties.objectSid
il me semble que les nopuveaux groupes sont dans une serie de SID differente des SID systemes.
Regarde ici pour conmencer support.microsoft.com/kb/243330/fr
et peut etre qu'un MVP te donnera plus d'info
je continue de gratter
pour la liste des groupes non systemes tu doit regarde le SID. Soit dans ton script : $group.psbase.Properties.objectSid
il me semble que les nopuveaux groupes sont dans une serie de SID differente des SID systemes.
Regarde ici pour conmencer support.microsoft.com/kb/243330/fr
et peut etre qu'un MVP te donnera plus d'info
je continue de gratter
Connexion ou Créer un compte pour participer à la conversation.
- JONDON Cyril
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 13 ans 2 mois #14379
par JONDON Cyril
Réponse de JONDON Cyril sur le sujet Re:Lister les groupes locaux d'un serveur
Salut,
J'ai fait ça en WMI avec les classe Win32_Group et Win32-GroupUser :
[code:1]Get-WmiObject -namespace root\cimv2 Win32_Group |
where-object {($_.Sid).length -ge 13} | select-Object Name |
ForEach-Object {$Filtre=$_.Name;gwmi Win32_GroupUser | Where {$_.GroupComponent -like \"*$Filtre*\"} |
Select-Object @{Label=\"GroupesLocaux\";Expression={$Filtre}},@{Label=\"Membres\";Expression=`
{((($_.PartComponent).split(\",\"«»)[0]).split(\"=\"«»)[1]).replace('\"','')+ \"\\" `
+ ((($_.PartComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"','')}}}| ft -autosize
GroupesLocaux Membres
MONGROUPELOCAL Cyril-PC\Administrateur
MONGROUPELOCAL Cyril-PC\Cyril
MONGROUPELOCAL ADSERVICES\AlanB
WinRMRemoteWMIUsers__ Cyril-PC\Cyril
WinRMRemoteWMIUsers__ Cyril-PC\Administrateur
__vmware__ Cyril-PC\Test[/code:1]
Ce code ne retourne que les groupes locaux non built-in avec membres , les autres groupes locaux non built-in sans membre pas encore
Je regarde comment faire pour afficher aussi ceux qui sont sans membre.
Après y a juste à rajouter au code un pipe avec Export-CSV.
Il pourait encore être amélioré en utilisant l'option -Computername de gwmi en gérant un fichier de computers en Input.
J'espère que ca répond en partie à ton besoin
J'ai fait ça en WMI avec les classe Win32_Group et Win32-GroupUser :
[code:1]Get-WmiObject -namespace root\cimv2 Win32_Group |
where-object {($_.Sid).length -ge 13} | select-Object Name |
ForEach-Object {$Filtre=$_.Name;gwmi Win32_GroupUser | Where {$_.GroupComponent -like \"*$Filtre*\"} |
Select-Object @{Label=\"GroupesLocaux\";Expression={$Filtre}},@{Label=\"Membres\";Expression=`
{((($_.PartComponent).split(\",\"«»)[0]).split(\"=\"«»)[1]).replace('\"','')+ \"\\" `
+ ((($_.PartComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"','')}}}| ft -autosize
GroupesLocaux Membres
MONGROUPELOCAL Cyril-PC\Administrateur
MONGROUPELOCAL Cyril-PC\Cyril
MONGROUPELOCAL ADSERVICES\AlanB
WinRMRemoteWMIUsers__ Cyril-PC\Cyril
WinRMRemoteWMIUsers__ Cyril-PC\Administrateur
__vmware__ Cyril-PC\Test[/code:1]
Ce code ne retourne que les groupes locaux non built-in avec membres , les autres groupes locaux non built-in sans membre pas encore
Je regarde comment faire pour afficher aussi ceux qui sont sans membre.
Après y a juste à rajouter au code un pipe avec Export-CSV.
Il pourait encore être amélioré en utilisant l'option -Computername de gwmi en gérant un fichier de computers en Input.
J'espère que ca répond en partie à ton besoin
Connexion ou Créer un compte pour participer à la conversation.
- JONDON Cyril
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 13 ans 2 mois #14380
par JONDON Cyril
Réponse de JONDON Cyril sur le sujet Re:Lister les groupes locaux d'un serveur
Bon cette fois ci ça doit être bon j'ai modifié le filtre qui n'était pas correct ds certains cas :
-like remplace par -eq donc la plus de souci on récupère bien les membres de notre groupe à coup sur.
Ensuite pour rajouter à notre liste de Groupes Locaux Non Builtin avec Membres les Groupes Locaux Non Builtin Sans Membre j'ai utilisé la cmdlet Compare-Object et en fin de traitement je fais un append au fichier CSV.
Ci-dessous le Code :
[code:1]Get-WmiObject Win32_Group |
where-object {($_.Sid).length -ge 13} | select-Object Name |
ForEach-Object {$Filtre=$_.Name;gwmi Win32_GroupUser | Where {((($_.GroupComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"',\"\"«») -eq $Filtre} |
Select-Object @{Label=\"GroupesLocaux\";Expression={$Filtre}},@{Label=\"Membres\";Expression=`
{((($_.PartComponent).split(\",\"«»)[0]).split(\"=\"«»)[1]).replace('\"','')+ \"\\" `
+ ((($_.PartComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"','')}}} |
Export-CSV c:\MaListe.csv -Append
$GLWithMember = gwmi Win32_GroupUser |
Select-Object @{Label=\"GroupesLocaux\";Expression={((($_.GroupComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"','')}}
$GLNoBuiltIn = gwmi Win32_Group |
where-object {($_.Sid).length -ge 13} | Select-Object @{Label=\"GroupesLocaux\";Expression={$_.Name}}
$GLNoBuiltInWithNoMember = Compare-Object -Ref $GLWithMember -Dif $GLNoBuiltIn -Property GroupesLocaux |
Where-Object {$_.sideindicator -eq \"=>\"} |
Select-Object GroupesLocaux,@{Label=\"Membres\";Expression={\"Sans Membre\"}}
if ($GLNoBuiltInWithNoMember -ne $null) {$GLNoBuiltInWithNoMember | Export-CSV c:\MaListe.csv -Append}[/code:1]
[code:1]PS C:\> import-csv C:\maliste.csv | ft -autosize
GroupesLocaux Membres
MONGROUPELOCAL Cyril-PC\Administrateur
MONGROUPELOCAL Cyril-PC\Cyril
MONGROUPELOCAL ADSERVICES\AlanB
MONGROUPELOCAL Cyril-PC\Test3
NEWGROUP ADSERVICES\MichaelLbis
NEWGROUP ADSERVICES\HideatsuHbis
NEWGROUP ADSERVICES\DennisBbis
NEWGROUP ADSERVICES\ApurvaD
NEWGROUP ADSERVICES\AlanBbis
NEWGROUP ADSERVICES\AlanB
NEWGROUP Cyril-PC\Test3
WinRMRemoteWMIUsers__ Cyril-PC\Cyril
WinRMRemoteWMIUsers__ Cyril-PC\Administrateur
__vmware__ Cyril-PC\Test
SANSMEMBRE Sans Membre
SANSMEMBRE2 Sans Membre [/code:1]
Y a surement plus simple mais c'est une solution qui a le mérite de fonctionner.
Ne pas hésiter si besoin de plus d'infos.
@+
-like remplace par -eq donc la plus de souci on récupère bien les membres de notre groupe à coup sur.
Ensuite pour rajouter à notre liste de Groupes Locaux Non Builtin avec Membres les Groupes Locaux Non Builtin Sans Membre j'ai utilisé la cmdlet Compare-Object et en fin de traitement je fais un append au fichier CSV.
Ci-dessous le Code :
[code:1]Get-WmiObject Win32_Group |
where-object {($_.Sid).length -ge 13} | select-Object Name |
ForEach-Object {$Filtre=$_.Name;gwmi Win32_GroupUser | Where {((($_.GroupComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"',\"\"«») -eq $Filtre} |
Select-Object @{Label=\"GroupesLocaux\";Expression={$Filtre}},@{Label=\"Membres\";Expression=`
{((($_.PartComponent).split(\",\"«»)[0]).split(\"=\"«»)[1]).replace('\"','')+ \"\\" `
+ ((($_.PartComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"','')}}} |
Export-CSV c:\MaListe.csv -Append
$GLWithMember = gwmi Win32_GroupUser |
Select-Object @{Label=\"GroupesLocaux\";Expression={((($_.GroupComponent).split(\",\"«»)[1]).split(\"=\"«»)[1]).replace('\"','')}}
$GLNoBuiltIn = gwmi Win32_Group |
where-object {($_.Sid).length -ge 13} | Select-Object @{Label=\"GroupesLocaux\";Expression={$_.Name}}
$GLNoBuiltInWithNoMember = Compare-Object -Ref $GLWithMember -Dif $GLNoBuiltIn -Property GroupesLocaux |
Where-Object {$_.sideindicator -eq \"=>\"} |
Select-Object GroupesLocaux,@{Label=\"Membres\";Expression={\"Sans Membre\"}}
if ($GLNoBuiltInWithNoMember -ne $null) {$GLNoBuiltInWithNoMember | Export-CSV c:\MaListe.csv -Append}[/code:1]
[code:1]PS C:\> import-csv C:\maliste.csv | ft -autosize
GroupesLocaux Membres
MONGROUPELOCAL Cyril-PC\Administrateur
MONGROUPELOCAL Cyril-PC\Cyril
MONGROUPELOCAL ADSERVICES\AlanB
MONGROUPELOCAL Cyril-PC\Test3
NEWGROUP ADSERVICES\MichaelLbis
NEWGROUP ADSERVICES\HideatsuHbis
NEWGROUP ADSERVICES\DennisBbis
NEWGROUP ADSERVICES\ApurvaD
NEWGROUP ADSERVICES\AlanBbis
NEWGROUP ADSERVICES\AlanB
NEWGROUP Cyril-PC\Test3
WinRMRemoteWMIUsers__ Cyril-PC\Cyril
WinRMRemoteWMIUsers__ Cyril-PC\Administrateur
__vmware__ Cyril-PC\Test
SANSMEMBRE Sans Membre
SANSMEMBRE2 Sans Membre [/code:1]
Y a surement plus simple mais c'est une solution qui a le mérite de fonctionner.
Ne pas hésiter si besoin de plus d'infos.
@+
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.044 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Lister les groupes locaux d'un serveur