[英]Powershell batch of commands response into 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;
關於如何實現這一目標的任何建議?
創建一個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
這將在您用來運行它的帳戶的本地域上運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.