PowerShell变量

时间:2015-07-02 17:26:19

标签: powershell powershell-v4.0

如果我在函数中声明变量,我可以在函数外部访问该变量吗?意思是让我说我​​有一个运行5个SQL查询的函数,我使用变量$numberReturned来显示每个查询返回的结果。我可以从函数外部访问$numberReturned吗?

$query1 = "Select * from blahblahblah"
$query2 = "Select * from fooo"
$query3 = "Select * from bar"

Execute-Query $query1
if (Execute-Query $query1)
{
  if (Execute-Query $query2)
  { 
    Execute-Query $query3
  }
}

Write-Host $QueryName & $numberReturned 

Function Execute-Query 
{
  param($QueryName)

  #Stuff to Connect To SQL Server Here

  $command = New-Object System.Data.SqlClient.SqlCommand
  $command.CommandText = $QueryName
  #$connection is declared above in the connection stuff
  $command.Connection = $connection

  $SqlAdapter = New-Object System.Data.SqlClient.SqlCommand
  $SqlAdapter.SelectCommand = $command
  $DataSet = New-Object System.Data.DataSet
  $numberReturned = $SqlAdapter.Fill($DataSet)
}

编辑--- 经过进一步的研究(Mainly This Artcile),我发现我的问题都与范围有关!

1 个答案:

答案 0 :(得分:1)

虽然OP已经找到了答案,但我在这里提出了这个问题,以防OP中的链接中断。

根据https://technet.microsoft.com/en-us/library/hh847849.aspx

  

Windows PowerShell保护对变量,别名,函数的访问,   和Windows PowerShell驱动器(PSDrives)通过限制它们的位置   阅读和更改......

     

...您在范围中包含的项目在其范围内可见   已创建并在任何子范围内,除非您明确指出   私人的。您可以放置​​变量,别名,函数或Windows   PowerShell在一个或多个范围内驱动。

因此,例如,在脚本级别声明的变量可以在脚本中定义的函数内访问。 除非特别说明,否则在函数外部声明的变量将无法在函数外部访问 以允许访问的方式声明,例如声明变量global。

以下是同一链接范围的细分:

  

全局:Windows PowerShell启动时生效的范围。   Windows PowerShell时存在的变量和函数   已在全局范围内创建了启动。这包括自动   变量和偏好变量。这还包括变量,   别名以及Windows PowerShell配置文件中的函数。

     

本地:当前范围。本地范围可以是全局范围   或任何其他范围。

     

脚本:脚本文件运行时创建的范围。只要     脚本中的命令在脚本范围中运行。到命令   在脚本中,脚本范围是本地范围。

     

私有:私有范围内的项目无法在当前范围之外看到     范围。您可以使用私有范围来创建私有版本   另一个范围内具有相同名称的项目。

这是一般信息。在此之后,它变得比这个问题所必需的更复杂。对于需要深入了解的人来说,链接位于顶部。由于原始海报已经发现访问该变量的能力取决于声明的方式/位置。在这种情况下,只需在函数外声明变量就足够了。