在函数/工作流中访问powershell变量

时间:2018-03-30 09:45:40

标签: powershell variables workflow

我正在开发一个带有函数和工作流的Powershell脚本。不幸的是,我无法访问函数内部的变量。这是一个例子:

$location = "c:\temp"

function PingComputer
{
     Param($ip)

     $res = Test-Connection -ComputerName $ip -quiet -Count 1 

     If ($res -eq "true") 
     {
          Try
          {
                #Some tasks if pings are ok
                #For example : copy-item -path $location -destination $dest -force -recurse
           }
           Catch
           {
           #Catch exceptions
           }
     }
     Else
     {
     #Ping fail
     }
  }

workflow parallelPingCOmputer {
Param($ips)
$i=0
foreach -parallel($ip in $ips)
{
    PingComputer($ip)
    $workflow:i++
    $count = $ips.Count
    InlineScript {
        #write-host "$using:i : " $using:ips.count " : $using:ips "
        Write-Progress -Activity "Poste : $using:ip" -Status "Postes effectués : $using:i sur $using:count" -PercentComplete (($using:i / $using:Count) * 100)
        sleep -s 1
        }

     }
}

$request = parallelPingComputer -ips $ip_list | Select-object date, computer, result | out-gridview

这是我当前脚本的简化版本。但是,正如您所看到的,在我的函数PingComputer中无法访问变量$ location。我试图将其范围修改为全局或脚本,但没有任何作用。

我从copy-item获得的消息是“path is null”...如何使我的变量可访问?

1 个答案:

答案 0 :(得分:0)

如果要重复使用该功能,只需复制工作流程中的功能并将其保留在外部。否则,复制工作流程中的功能并删除外部的功能,如下面的代码。它可以在不使用工作流程内的功能的情况下解决您的问题。

我做了example on my Github

α = Number