class Inspec::Resources::WindowsGroup
Public Instance Methods
groups()
click to toggle source
returns all local groups
# File lib/inspec/resources/groups.rb, line 236 def groups script = <<-EOH Function ConvertTo-SID { Param([byte[]]$BinarySID) (New-Object System.Security.Principal.SecurityIdentifier($BinarySID,0)).Value } $Computername = $Env:Computername $adsi = [ADSI]"WinNT://$Computername" $groups = $adsi.Children | where {$_.SchemaClassName -eq 'group'} | ForEach { $name = $_.Name[0] $sid = ConvertTo-SID -BinarySID $_.ObjectSID[0] $group =[ADSI]$_.Path $members = $_.Members() | Foreach-Object { $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null) } # An empty collection of these objects isn't properly converted to an empty array by ConvertTo-Json if(-not [bool]$members) { $members = @() } new-object psobject -property @{name = $group.Name[0]; gid = $sid; domain = $Computername; members = $members} } $groups | ConvertTo-Json -Depth 3 EOH cmd = inspec.powershell(script) # cannot rely on exit code for now, successful command returns exit code 1 # return nil if cmd.exit_status != 0, try to parse json begin groups = JSON.parse(cmd.stdout) rescue JSON::ParserError => _e return [] end # ensure we have an array of groups groups = [groups] unless groups.is_a?(Array) groups end