anon1m0us said:
Hi; I have a command to obtain all the groups a user is part of. The
command is:
dsquery user domainroot -samid <user name> | dsget user -memberof -
expand
The output is:
"CN=Domain Users,CN=Users,DC=testdc,DC=testroot,DC=test,DC=com"
"CN=DA-C3-AB-AB1-SERVER-DATA-CHANGE,OU=ACL_Groups,OU=Groups,OU=ABC,DC=
testdc,DC=testroot,DC=test,DC=com"
I need to obtain the group name From after CN= until the first comma.
I tried scan and match. I can't get it right.
irb(main):001:0> output = "CN=Domain
Users,CN=Users,DC=testdc,DC=testroot,DC=test,DC=com"
irb(main):006:0> output.split(',')
=> ["CN=Domain Users", "CN=Users", "DC=testdc", "DC=testroot",
"DC=test", "DC=com"]
irb(main):008:0> output.split(',').grep(/CN=/)
=> ["CN=Domain Users", "CN=Users"]
irb(main):009:0> output.split(',').grep(/CN=/).collect{|a| a=~/CN=(.*)/;
$1}
=> ["Domain Users", "Users"]
You can do what you want with the final array.
The final collect part of the last line is a bit cryptic. Others may
follow with more elegant ways of doing this.
A variation:
irb(main):018:0* output = "CN=Domain
Users,CN=Users,DC=testdc,DC=testroot,DC=test,DC=com"
=> "CN=Domain Users,CN=Users,DC=testdc,DC=testroot,DC=test,DC=com"
irb(main):019:0> output.split(/,/).map {|s| s[/^CN=(.*)$/, 1]}
=> ["Domain Users", "Users", nil, nil, nil, nil]
irb(main):020:0> output.split(/,/).map {|s| s[/^CN=(.*)$/, 1]}.compact
=> ["Domain Users", "Users"]
irb(main):021:0> output.split(/,/).map! {|s| s[/^CN=(.*)$/, 1]}.compact!
=> ["Domain Users", "Users"]
Or, probably a bit more efficient
irb(main):023:0> output.split(/,/).inject([]) {|ar,s| x=s[/^CN=(.*)$/,
1] and ar << x;ar}
=> ["Domain Users", "Users"]
Or, with enumerator
irb(main):032:0> output.to_enum
scan, /(?:\A|,)CN=([^,]*)/).map {|m| m[0]}
=> ["Domain Users", "Users"]
A more generic approach would first extract all the information from the
record and then select the piece wanted:
irb(main):037:0> data = output.to_enum
scan, /(?:\A|,)([^=]+)=([^,]*)/).
irb(main):038:0* inject(Hash.new {|h,k| h[k]=[]}) {|ha,m| ha[m[0]] <<
m[1];ha}
=> {"CN"=>["Domain Users", "Users"], "DC"=>["testdc", "testroot",
"test", "com"]}
irb(main):039:0> data["CN"]
=> ["Domain Users", "Users"]
Ok, I have too much time today...
Kind regards
robert