• 函数(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

  • 相关阅读:
    mysql性能分析工具
    vim使用大全
    Vue computed属性
    模板题 + KMP + 求最小循环节 --- HDU 3746 Cyclic Nacklace
    Greedy --- HNU 13320 Please, go first
    DFS --- HNU 13307 Galaxy collision
    HNU 13308 Help cupid
    Linux
    dp
    2015 Multi-University Training Contest 2 1006 Friends
  • 原文地址:https://www.cnblogs.com/dreamer-fish/p/3833012.html
Copyright © 2020-2023  润新知