![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks. |
| |||||||
![]() |
| |
| | #1 (permalink) |
| | 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) |
| | 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 Quote: > 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![]() |
| | #3 (permalink) |
| | Re: Using param with InvokeReturnAsIs BTW, why not writing it as a function? ----- Shay Levi $cript Fanatic http://scriptolog.blogspot.com Quote: > Works fine for me : > PS>> Y:$y"; PS>> Quote: > $x+$y} > PS>> Quote: > v3 X: 15 Y:16 > 31 PS>> Quote: > v3 X: 15 Y:16 > 31 > ----- > Shay Levi > $cript Fanatic > http://scriptolog.blogspot.com Quote: >> 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![]() |
| | #4 (permalink) |
| | Re: Using param with InvokeReturnAsIs On Jan 18, 8:55*am, Shay Levi <n...@xxxxxx> wrote: Quote: > 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 Fanatichttp://scriptolog.blogspot.com > 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) |
| | 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 Quote: > On Jan 18, 8:55 am, Shay Levi <n...@xxxxxx> wrote: > Quote: >> 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 Fanatichttp://scriptolog.blogspot.com > 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![]() |
| | #6 (permalink) |
| | Re: Using param with InvokeReturnAsIs On Jan 18, 11:21*am, Shay Levi <n...@xxxxxx> wrote: Quote: > 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 Fanatichttp://scriptolog.blogspot.com > > > Quote: > > On Jan 18, 8:55 am, Shay Levi <n...@xxxxxx> wrote: Quote: Quote: > >> Works fine for me : Quote: Quote: > >> 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 Fanatichttp://scriptolog.blogspot.com > > Windows 2003 Server. Quote: > > 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 Quote: > > $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) Quote: > > Method2 X: 7 Y:8 > > 15- Hide quoted text - > - Show quoted text - (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) |
| | Re: Using param with InvokeReturnAsIs On Jan 18, 10:21*am, Shay Levi <n...@xxxxxx> wrote: Quote: > 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 Fanatichttp://scriptolog.blogspot.com > $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) |
| | Re: Using param with InvokeReturnAsIs On Jan 18, 11:57*am, cashfo...@xxxxxx wrote: Quote: > On Jan 18, 10:21*am, Shay Levi <n...@xxxxxx> wrote: > > > > > Quote: > > I'm runing PowerShell CTP on WinXP SP2. I checked > > the commands on a W3K SP1 box and it works. Quote: > > As for the below, you need to *capture* the new object you created, assign > > it to a new variable. Quote: > > $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} Quote: > > $member1 = new-object management.automation.PSScriptMethod "Method1",$script1 > > $object.psobject.members.Add($member1) Quote: > > $member2 = new-object management.automation.PSScriptMethod "Method2",$script2 > > $object.psobject.members.Add($member2) Quote: > > $new = $object > > $new.Method1(5,6) > > Method1 X: 5 Y: 6 > > 11 Quote: > > $new.Method2(7,8) > > Method2 X: 7 Y:8 > > 15 Quote: > > ----- > > Shay Levi > > $cript Fanatichttp://scriptolog.blogspot.com > I executed > > $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?- Hide quoted text - > > - Show quoted text - 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![]() |
| | #9 (permalink) |
| | Re: Using param with InvokeReturnAsIs Thanks. ----- Shay Levi $cript Fanatic http://scriptolog.blogspot.com Quote: > On Jan 18, 11:57 am, cashfo...@xxxxxx wrote: > Quote: >> On Jan 18, 10:21 am, Shay Levi <n...@xxxxxx> wrote: >> Quote: >>> 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 Fanatichttp://scriptolog.blogspot.com >> >> $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?- Hide quoted text - >> >> - Show quoted text - >> > > 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![]() |
| | #10 (permalink) |
| | Re: Using param with InvokeReturnAsIs Thanks everyone. This is less disturbing than an OS difference. Cash |
My System Specs![]() |
![]() |
| Thread Tools | |
| |
Similar Threads | ||||
| Thread | Forum | |||
| PowerShell param array | PowerShell | |||
| What expressions can you specify in the -filter param for dir | PowerShell | |||
| param VS dotsourcing | PowerShell | |||
| Invoke-Item with param. | PowerShell | |||
| Info: Param vs $args | PowerShell | |||