Much appreciated, it must have been a case of staring at the whole mess for too long. I soon resolved the variable expansion, but then cleaned it all up by passing both hashes in as args and resolving internal to the dynamic script once at the remote host.
Lots of nuances associated with remoting, especially related to getting results back at the originating console, its been an adventure. Thanks! jlc ________________________________________ From: Michael B. Smith [[email protected]] Sent: Monday, June 11, 2012 7:14 AM To: NT System Admin Issues Subject: RE: Dynamic ScriptBlock creation If you have a hash-table (or any variable that uses text as a 'getter' for the enumerator) you can use single or double quotes to work around PowerShell's variable naming conventions. If you are inside a double-quoted here-string, variable expansion still happens in single quotes located inside the string. So: $objectName = 'someHashTable' $valueName = 'some-Value-Name' $resultName = 'resultVariable' $here = "`$$resultName = `$$objectName.'$valueName'" If you need even more extreme naming conventions, consider this naming form for your variables, which can also be used to access methods and properties and special types: ${This is a Valid VaRiAbLe Name, with brace decorations!} = 1 -----Original Message----- From: Joseph L. Casale [mailto:[email protected]] Sent: Friday, June 08, 2012 9:16 PM To: NT System Admin Issues Subject: RE: Dynamic ScriptBlock creation The problem stemmed from the fact that I have several modes or operations that a script may run against several servers. Almost all of the different operations required some base set of config to be derived by executing various queries on the remote servers locally. All of these jobs required a load of config to be passed into them, I wrapped invoke-command in a loop that read hosts and their unique attributes from a file then spawned the jobs. Some of these jobs required state information to be passed between them, but I could not execute the sequence all at once unless each stage was successful on each node. If a node had an issue, manual intervention would be required otherwise any node that proceeded would cause the nodes not passing checks to be invalid and the clusters would be destroyed. So each step has to be invoked manually. I also write state info the successive jobs need to an xml file... Burden came when developing the script, the script blocks for each stage reused code and every change required amending each script block. So I split them into separate files, set them to vars, and sourced them in one small script which then assembled them all including the params and state info into one large script block that is sent to to each node, the single arg passed in then invokes the required function. Thats how I arrived at the exact example I posted, vars changed as they were meaningless. If I use single quotes, how do I perform the substitution? I am also not sure what you mean by decorated variables, a small nudge would be very appreciated:) Thanks! jlc ________________________________________ From: Michael B. Smith [[email protected]] Sent: Friday, June 08, 2012 6:49 PM To: NT System Admin Issues Subject: RE: Dynamic ScriptBlock creation There are likely 2 or 3 ways to address this (using single quotes or decorated variables), but I'd really like to see an real-world example, 'cuz it's not clear to me what you are trying to accomplish. And, by the way, scriptblocks are always serialized as strings - so you may not actually be helping yourself. ~ Finally, powerful endpoint security that ISN'T a resource hog! ~ ~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~ --- To manage subscriptions click here: http://lyris.sunbelt-software.com/read/my_forums/ or send an email to [email protected] with the body: unsubscribe ntsysadmin ~ Finally, powerful endpoint security that ISN'T a resource hog! ~ ~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~ --- To manage subscriptions click here: http://lyris.sunbelt-software.com/read/my_forums/ or send an email to [email protected] with the body: unsubscribe ntsysadmin ~ Finally, powerful endpoint security that ISN'T a resource hog! ~ ~ <http://www.sunbeltsoftware.com/Business/VIPRE-Enterprise/> ~ --- To manage subscriptions click here: http://lyris.sunbelt-software.com/read/my_forums/ or send an email to [email protected] with the body: unsubscribe ntsysadmin
