Je souhaite qu'une commande répertorie tous les comptes d'utilisateurs d'un système Windows (Vista, 7, etc.) de manière à pouvoir les parcourir à l'aide d'une commande ultérieure.
Net User
me donne les données pour lesquelles je cherche, mais ajoute un tas d'autres fichiers indésirables qui pourraient rendre difficile l'analyse de l'utilisateur.
Idéalement, je recevrais une sortie comme:
> usercommand
user1
user2
user3
Si vous souhaitez parcourir les utilisateurs strictement dans la ligne de commande Windows, la méthode la plus simple consiste à combiner wmic
et une boucle for
name__.
for /f "tokens=* skip=1" %%a in ('wmic UserAccount get Name') do (
if not "%%a"=="" (
:: %%a is a variable containing an account name
)
)
Le coeur de la commande est wmic UserAccount get Name
, qui devrait afficher une liste de comptes. Vous voudrez peut-être filtrer, comme Karan l’a fait dans sa réponse VBScript, avec quelque chose comme wmic UserAccount where "LocalAccount=True" get Name
. Tout champ est filtrable; pour les afficher tous, utilisez wmic UserAccount get
(en omettant Name
name__).
La boucle for
sert simplement à analyser le résultat de la commande. Il ignore la première ligne (qui affiche l'en-tête de colonne) et la dernière ligne est ignorée avec la commande if
name__, car elle est vide. Voir for /?
pour plus d'informations.
Pour tous ceux qui sont ici et qui cherchent simplement un moyen de répertorier tous les utilisateurs de votre machine en ligne de commande, sans avoir besoin d'une boucle. Il suffit de lancer cette commande:
Net User
Et il produira ce dont vous avez besoin dans ce format
-------------------------------------
User1 User2 User3 User4
The command completed successfully.
Cela produira littéralement ce que vous demandez:
dir/b C:\Utilisateurs
Ce script Windows PowerShell fournira une liste d'utilisateurs dans un format de tableau. Ce n'est pas exactement ce que vous recherchez, mais il ne devrait pas être trop difficile de reformater la sortie dans un format que vous pourriez utiliser pour alimenter dans une autre commande.
$computerName = "$env:computername"
$computer = [ADSI]"WinNT://$computerName,computer"
$computer.psbase.Children | Where-Object { $_.psbase.schemaclassname -eq 'user' } | Format-Table Name, Description -autoSize
Enregistrez les éléments suivants sous un nom tel que GetLocalUsers.vbs:
Set colItems = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_UserAccount Where LocalAccount=True")
For Each objItem in colItems
Wscript.Echo objItem.Name
Next
Exécuter à partir de la ligne de commande comme suit:
cscript //NoLogo GetLocalUsers.vbs