随笔 - 911  文章 - 5  评论 - 94  阅读 - 243万

函数(Function)作用域 / 远程函数执行

函数跟变量一样也是有作用域的:Global、Script、Local、Private

Global:作用于整个PowerShell会话,只要PowerShell会话不结束,被Global修饰的变量和函数都是可用的。

Script:仅作用于脚本执行期间,一旦脚本执行完毕,脚本中被Script修饰的变量和函数都不在可用。

Local:默认作用域,变量在当前和嵌套的作用域中可见,复制操作语法能在当前的local作用域中修改变量值。

Private:最严格的作用域,变量仅在当前作用域有效。通过这个关键字,可以在子脚本块中隐藏变量。

 

声明全局函数:

function global:test
{
param($x,$y)
$x * $y
}

执行函数:

test 2 3

test -y 2 -x 3

该全局函数在通过invoke-command在远程计算机执行的时候,不会被识别。

 

function ab
{
param($a,$b)
$c=$a-$b
return $c
}

$a=10
$b=20

通过如下方法也可以执行函数
& $function:ab 5 8

 

查看本机已定义函数:
dir functions:

 

将本地带有参数的函数,在远程机器上执行:

方法一:

复制代码
 1 function ab
 2 {
 3  param($a,$b)
 4  $c=$a+$b
 5  return $c
 6 }
 7 
 8 $a=10
 9 $b=20
10 invoke-command -computername 172.16.129.62 -Credential $cred -scriptblock ${function:ab} -ArgumentList $a,$b
复制代码

这样的话,scriptblock中没有办法再加入其他语句执行。

只能先在scriptblock中定义函数,就是在远程计算机定义好函数后再进行调用,如下:

 

复制代码
1  invoke-command -computername 172.16.129.62 -Credential $cred -scriptblock { param ($a,$b)
2  function ab
3  {
4   param($a,$b)
5   $c=$a-$b
6   return $c
7  }
8   ab $a $b
9 }-ArgumentList $a,$b
复制代码

      param($a,$b) [或者Function FunctionName($a,$b)] 中的变量是按顺序来接收的,-ArgumentList部分第一个变量即为$a,第二个为$b。如果-ArgumentList部分中的$a在后,$b在前,则$b的值就是第一个传入的变量,$a的值是第二个传入的变量。

  -ArgumentList中的$a,$b实际上与param中的 $a,$b 没有任何关系。

 

方法二:

复制代码
 1 function localFunc($name,$age){
 2  write-host “name=$name,age=$age 3 }
 4  
 5 function Get-FuncDef($name)
 6 {
 7  $func="Function:\$name"
 8  if(Test-Path $func)
 9  {
10   return 'function {0} {{ {1} }}' -f $name,(dir $func).Definition
11  }
12 }
13  
14 Invoke-command -ComputerName localhost -ScriptBlock {
15 param($funcDef,$name,$age)
16 Invoke-Expression $funcDef
17 localFunc -name $name -age $age
18 } -ArgumentList (Get-FuncDef localFunc),'xiaoxiaoJiao',30
复制代码

方法二来自于:http://www.pstips.net/question/2634.html

posted on   momingliu11  阅读(1407)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2013-07-09 DPM恢复点和保持期、常见问题排除指南
2013-07-09 裸机恢复 (BMR) 和系统状态恢复
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示