![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
|
Welcome to Vista Forums we are your forum to discuss Windows Vista x64 and x86 systems. Whether you need help or just want to post an idea you have on Vista, this is the forum for you.
br> br> |
| |||||||
![]() |
| | Thread Tools | Display Modes |
| | #1 (permalink) |
| Guest | Using param with InvokeReturnAsIs I can't seem to use param when invoking a scriptblock using InvokeReturnAsIs. Also, the same problem occurs when using a PSScriptMethod. Here are some examples of what works and does not work. First the Easy: &{param($x,$Y) Write-Host "v1 X: $x Y:$y"; $x+$y} 5 6 v1 X: 5 Y:6 11 This demonstrates params come in as Args: $script2 = [scriptBlock] { $x = $Args[0]; $y = $Args[1]; Write-Host "v2 X: $x Y:$y"; $x+$y} &$script2 9 10 v2 X: 9 Y:10 19 $script2.InvokeReturnAsIs(11,12) v2 X: 11 Y:12 23 Now with a param statement: $script3 = [scriptBlock] { param($x,$y); Write-Host "v3 X: $x Y:$y"; $x +$y} &$script3 13 14 v3 X: 13 Y:14 27 $script3.InvokeReturnAsIs(15,16) v3 X: Y: All works as expected except for the last call. Is there any fix or work around? |
My System Specs![]() |
| | #2 (permalink) | ||||||||||||
| Guest | Re: Using param with InvokeReturnAsIs Works fine for me : PS > $script3 = [scriptBlock] { param($x,$y); Write-Host "v3 X: $x Y:$y"; $x+$y} PS > $script3.InvokeReturnAsIs(15,16) v3 X: 15 Y:16 31 PS > $script3.Invoke(15,16) v3 X: 15 Y:16 31 ----- Shay Levi $cript Fanatic http://scriptolog.blogspot.com
| ||||||||||||
My System Specs![]() | |||||||||||||
| | #3 (permalink) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Guest | Re: Using param with InvokeReturnAsIs BTW, why not writing it as a function? ----- Shay Levi $cript Fanatic http://scriptolog.blogspot.com
PS>> Y:$y"; PS>>
PS>>
PS>>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
My System Specs![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | #4 (permalink) | ||||||||||||
| Guest | Re: Using param with InvokeReturnAsIs On Jan 18, 8:55*am, Shay Levi <n...@xxxxxx> wrote:
Windows 2003 Server. As to why I'm needing to invoke a script, it's not worth digging into the problem set. But as I said I get the same problem with PSScriptMethod How does this work for you? $object = new-object Management.Automation.PSObject $script1 = [scriptBlock] { param($x,$y); Write-Host "Method1 X: $x Y: $y"; $x+$y} $script2 = [scriptBlock] { $x = $Args[0]; $y = $Args[1]; Write-Host "Method2 X: $x Y:$y"; $x+$y} $member1 = new-object management.automation.PSScriptMethod "Method1", $script1 $object.psobject.members.Add($member1) $member2 = new-object management.automation.PSScriptMethod "Method2", $script2 $object.psobject.members.Add($member2) $object.Method1(5,6) Method1 X: Y: $object.Method2(7,8) Method2 X: 7 Y:8 15 | ||||||||||||
My System Specs![]() | |||||||||||||
| | #5 (permalink) | ||||||||||||||||||||||||
| Guest | Re: Using param with InvokeReturnAsIs I'm runing PowerShell CTP on WinXP SP2. I checked the commands on a W3K SP1 box and it works. As for the below, you need to *capture* the new object you created, assign it to a new variable. $object = new-object Management.Automation.PSObject $script1 = [scriptBlock] { param($x,$y); Write-Host "Method1 X: $x Y: $y"; $x+$y} $script2 = [scriptBlock] { $x = $Args[0]; $y = $Args[1]; Write-Host "Method2 X: $x Y:$y"; $x+$y} $member1 = new-object management.automation.PSScriptMethod "Method1",$script1 $object.psobject.members.Add($member1) $member2 = new-object management.automation.PSScriptMethod "Method2",$script2 $object.psobject.members.Add($member2) $new = $object $new.Method1(5,6) Method1 X: 5 Y: 6 11 $new.Method2(7,8) Method2 X: 7 Y:8 15 ----- Shay Levi $cript Fanatic http://scriptolog.blogspot.com
| ||||||||||||||||||||||||
My System Specs![]() | |||||||||||||||||||||||||
| | #6 (permalink) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Guest | Re: Using param with InvokeReturnAsIs On Jan 18, 11:21*am, Shay Levi <n...@xxxxxx> wrote:
(scriptblocks) is *broken* in powershell 1.0. As you can see, it`s fixed in in 2.0 CTP. - Oisin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
My System Specs![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| | #7 (permalink) | ||||||||||||
| Guest | Re: Using param with InvokeReturnAsIs On Jan 18, 10:21*am, Shay Levi <n...@xxxxxx> wrote:
$new = $object $new.Method1(5,6) and got: Method1 X: Y: There has to be some explanation. I'm fairly certain I've had the same behavior on more than one system but they are W3K Why would I need to "Capture" the object? What happens when you run the method on $object? | ||||||||||||
My System Specs![]() | |||||||||||||
| | #8 (permalink) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Guest | Re: Using param with InvokeReturnAsIs On Jan 18, 11:57*am, cashfo...@xxxxxx wrote:
You may have missed my other post - the explanation is simple. What you're trying to do won't work in powershell 1.0 - its broken - a bug - foobared. Shay is using a beta of powershell 2.0 where the problem has been fixed. You will have to use the $args collection in anonymous scriptblocks. Named parameters with "param" doesn`t work. Hope this helps, - Oisin / x0n | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
My System Specs![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||