Something like the following should do the trick:
Function ExpandList(sList, sDelimiter)
' Get List
Set dicSourceList = oEnvironment.ListItem(sList)
Set dicTargetList = CreateObject("Scripting.Dictionary")
' Iterate through source list
For Each sSourceListValue In dicSourceList.keys
' Expand Items
arValue = Split(sSourceListValue, sDelimiter)
For Each sValue In arValue
If Not dicTargetList.Exists(sValue) Then
dicTargetList.Add sValue, ""
End If
Next
Next
oEnvironment.ListItem(sList) = dicTargetList
End Function
One option could be to it e.g. in a user exit script within the gather step like
[Settings]
Priority=Default,Test
Properties=ADGroups(*),EvaluateMe
[Default]
ADGroups001="ADGroup1;ADGroup2;ADGroup3"
ADGroups002="ADGroup3;ADGroup4;ADGroup5;ADGroup6"
[Test]
UserExit=ExpandList.vbs
EvaluateMe=#ExpandList("ADGroups", ";")#
/Maik
From: [email protected] [mailto:[email protected]] On
Behalf Of Miller, Todd
Sent: Montag, 1. Juni 2015 19:42
To: [email protected]
Subject: RE: [MDT-OSD] Multi-value custom Settings
OK, let me give some more details so that you can give me better advice or at
least understand the actual problem I am trying to solve. I left out the
reason I was doing this because I thought it was too long and convoluted so I
simplified the information in hopes of getting a better answer to just my
current problem – which is how to parse ListItem custom settings. I hope this
is a little bit interesting and that I have explained the problem and my
solution clearly. Sorry, this gets a little complicated…
I have a MDT computer objects might get assigned to two (or more) roles. So we
have Roles001 = “Role1” and Role002=”Role2” after [CROLES] is processed by
ZTIGather
Role001 has a value ADGroups that equals “ADGroup1;ADGroup2;ADGroup3”
Role002 has a value ADGroups that equals “ADGroup3;ADGroup4;ADGroup5;ADGroup6”
The lists of ADGroups for each role are stored as colon separated packed
strings in the MDTDB. This is what you see in the dbo.Settings table of the
MDTDB. I’m not sure if this is MDT FrontEnd or MDTDB itself that stores the
ADGroups ListItem as a packed sting.
This is what the ADGroups Column shows in the [dbo.Settings] table in the MDTDB.
ADGroups from “Role1” =“ADGroup1;ADGroup2;ADGroup3” and
ADGroup from “Role2” =“ADGroup3;ADGroup4;ADGroup5;ADGroup6”
When ZTIGather processes tge [RSettings] section of CustomSettings.ini,
ZTIGather assigns this like…
ADGroups001 = “ADGroup1;ADGroup2;ADGroup3”
ADGroups002 =“ADGroup3;ADGroup4;ADGroup5;ADGroup6”
Instead of like this…
ADGroups001=”ADGroup1”
.
.
.
ADGroups007 = “ADGroup6”
I think the weakness is that the [RSettings]/ZTIGather doesn’t know how to deal
with merging multiple ListItems. It will merge single strings into a list but
I doesn’t seem to merge listitems into longer listitems. Either that, or MDT
FrontEnd is not storing ListItems into the DB in a way that [RSettings]
understands.
I suppose it would be possible to write a stored procedure in SQL to somehow
return the 7 values from the SQL query on “RoleSettings” rather than the 2
values that the MDT included SQL View “RoleSettings” currently returns with the
packed strings, but that is beyond my SQL abilities. It might also work to
modify ZTIGather so that if it saw a colon separated packed list for a setting
that was defined as a (*) listitem that it unparsed the packed strings into a
list too. The way it works today though, there doesn’t appear to be an inbuilt
way to do this.
Anyway, for me to work around this problem, I had to write my own code to
unpack those two (or more) packed string settings into an unpacked listitem
setting. And that is why I needed to know how to work with ListItems.
From: [email protected]<mailto:[email protected]>
[mailto:[email protected]] On Behalf Of Todd Hemsell
Sent: Monday, June 01, 2015 11:35 AM
To: [email protected]<mailto:[email protected]>
Subject: Re: [MDT-OSD] Multi-value custom Settings
It is a dictionary object, with all the properties and methods of a dictionary
object.
However I think you should use priorities and not try to parse out multiple
values. You are sort of defeating the purpose of the design.
On Thu, May 28, 2015 at 8:40 AM, Miller, Todd
<[email protected]<mailto:[email protected]>> wrote:
No. I am not trying to use the values inside Customsettings.ini
The values are created by CustomSettings.ini from the MDT database, but I need
to process those settings in a vbscript.wsf script called from the TS.
The answer I stumbled into after a LOT of searching is ...
ArraryVariable = oEnvironment.ListItem("CustomSetting").Keys
And the number of values in the ListItem is
oEnvironment.ListItem("CustomSetting").Count
It was the "Keys" part i was missing. I think that listitems are set up in
MDT as dictionaries, but my array is one diminutional, so it is the "Keys"
values that I am after. I had just never tried to process a multi-value
(listitem) custom variable before. I think I have this working OK.
I think this is right, but if I am going down the wrong path, please respond.
________________________________
From: [email protected]<mailto:[email protected]>
[[email protected]<mailto:[email protected]>] on
behalf of Keith Garner (Hotmail)
[[email protected]<mailto:[email protected]>]
Sent: Wednesday, May 27, 2015 4:34 PM
To: [email protected]<mailto:[email protected]>
Subject: RE: [MDT-OSD] Multi-value custom Settings
Does this help:
https://keithga.wordpress.com/2014/04/18/listitem-processing-in-customsettings-ini-file/
From: [email protected]<mailto:[email protected]>
[mailto:[email protected]<mailto:[email protected]>]
On Behalf Of Miller, Todd
Sent: Wednesday, May 27, 2015 1:29 PM
To: [email protected]<mailto:[email protected]>
Subject: [MDT-OSD] Multi-value custom Settings
I am having trouble finding an example of how to process multi-valued custom
settings.
I have two custom lists that will contain between 0 and several values…
For example -- CustomSetting001, CustomSetting002, CustomSetting003.
The values are set by SQL queries from CustomSettings.ini section [RSETTINGS].
When the computer is assigned to multiple roles, it might have multiple values
for the custom setting, and I need to process each.
Mostly, I need to figure out how to determine from a ZTI script how to COUNT
the # values there are and then figure out how to access each value
individually in a loop. In the example above, how would I know there are 3
values assigned, and how would I step through those values individually to
perform an action on each.
In general, I know what I am doing – just need a little help with these
list/array type values. My google skills are letting me down. “List” and
“MDT” is a bad google query because hundreds of web pages “list” the MDT
standard variables.
One idea I had was to just step through all the variables and take an action
where the Left(variableName, 14) = “MyVariablename”
But there is probably a more straightforward approach, right?
________________________________
Notice: This UI Health Care e-mail (including attachments) is covered by the
Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and
may be legally privileged. If you are not the intended recipient, you are
hereby notified that any retention, dissemination, distribution, or copying of
this communication is strictly prohibited. Please reply to the sender that you
have received the message in error, then delete it. Thank you.
________________________________
________________________________
Notice: This UI Health Care e-mail (including attachments) is covered by the
Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and
may be legally privileged. If you are not the intended recipient, you are
hereby notified that any retention, dissemination, distribution, or copying of
this communication is strictly prohibited. Please reply to the sender that you
have received the message in error, then delete it. Thank you.
________________________________
________________________________
Notice: This UI Health Care e-mail (including attachments) is covered by the
Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and
may be legally privileged. If you are not the intended recipient, you are
hereby notified that any retention, dissemination, distribution, or copying of
this communication is strictly prohibited. Please reply to the sender that you
have received the message in error, then delete it. Thank you.
________________________________
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This email message is for the sole use of the intended recipient(s) and may
contain confidential and privileged information of Cameron and its Operating
Divisions. Any unauthorized use or disclosure is prohibited. If you are not the
intended recipient, please contact the sender by reply email and delete and
destroy all copies of the original message inclusive of any attachments.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~