Пакет команд Powershell откликается в JSON
Я пытаюсь захватить список пользователей и групп на моем хосте Windows. Я могу записать информацию о пользователях и группах и назначить их переменным $ users и $ groups с помощью следующих команд:
$groups=$(Get-WmiObject win32_group | Select Name | Sort Name); $users=$(Get-WmiObject -Class Win32_UserAccount | Select Name | Sort Name)
Я не могу понять, как передать их в функцию ConvertTo-JSON, где каждый из них получает свои собственные ключи, то есть я бы хотел, чтобы ответ выглядел так:
{
"users": ["john", "geroge", "ringo"],
"groups": ["drums", "guitar"]
}
Я пробовал несколько вариантов этого, но не могу получить правильный синтаксис для PowerShell и функции ConvertTo-JSON.
$jsonBlob=$(\"groups\" : $(groups), \"users"\ : $(users); ConvertTo-Json $jsonBlob;
Любые предложения о том, как этого добиться?
2 ответа
Создать PSCustomObject
и подключите это к ConvertTo-Json
$groups = Get-WmiObject -Class Win32_Group | Sort-Object Name
$users = Get-WmiObject -Class Win32_UserAccount | Sort-Object Name
$jsonBlob = [PSCustomObject]@{"users" = $users.Name;"groups" = $groups.Name} | ConvertTo-Json
Я бы рекомендовал использовать DirectorySearcher для поиска пользователей и групп. Он будет более эффективным и сфокусирован только на имени.
$usearcher = [adsisearcher]'(&(objectCategory=User)(objectclass=person))'
$gsearcher = [adsisearcher]'(objectCategory=group)'
$usearcher.PropertiesToLoad.Add("name")
$gsearcher.PropertiesToLoad.Add("name")
$usearcher.SizeLimit = 1000
$gsearcher.SizeLimit = 1000
$obj = [pscustomobject]@{
users = $usearcher.FindAll() | % { $_.properties['name'][0] }
groups = $gsearcher.FindAll() | % { $_.properties['name'][0] }
}
$json = $obj | ConvertTo-Json
Это будет работать в локальном домене учетной записи, которую вы используете для этого.