如果我在函数中声明变量,我可以在函数外部访问该变量吗?意思是让我说我有一个运行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),我发现我的问题都与范围有关!
答案 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配置文件中的函数。
本地:当前范围。本地范围可以是全局范围 或任何其他范围。
脚本:脚本文件运行时创建的范围。只要 脚本中的命令在脚本范围中运行。到命令 在脚本中,脚本范围是本地范围。
私有:私有范围内的项目无法在当前范围之外看到 范围。您可以使用私有范围来创建私有版本 另一个范围内具有相同名称的项目。
这是一般信息。在此之后,它变得比这个问题所必需的更复杂。对于需要深入了解的人来说,链接位于顶部。由于原始海报已经发现访问该变量的能力取决于声明的方式/位置。在这种情况下,只需在函数外声明变量就足够了。