簡體   English   中英

Powershell 批處理命令響應為 JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM