用全局变量参数化的函数

时间:2014-01-12 13:11:36

标签: function variables powershell parameters

为什么我不能将全局变量用作函数的参数....

function Get-Diskinfo
{param($global:Computername) get-WmiObject win32_logicaldisk -ComputerName $global:Computername}

我需要在其他脚本的函数中重用该变量。

1 个答案:

答案 0 :(得分:4)

在param块中,您可以定义函数所具有的参数的名称(以及默认值和其他元数据)。 $ global:不能用作参数名,因为它定义了变量的范围。由于你没有定义变量,所以没有任何意义。

你想让你的函数有一个computername参数并给它一个全局变量的默认值吗?然后你可以做到以下几点。

function Get-Diskinfo {param($Computername = $global:Computername) 
   get-WmiObject win32_logicaldisk -ComputerName $Computername}

如果你不关心参数并且总是想要使用全局变量,你可以完全删除param。

function Get-Diskinfo {
   get-WmiObject win32_logicaldisk -ComputerName $global:Computername}

我通常不会建议上述解决方案。我发现最好不要使用像这样的全局变量,并让下面的脚本调用不同的函数。这使得代码对于阅读或调试它的人来说更容易理解。全局变量使代码难以理解,容易出错并且难以重用。

没有任何全局变量的函数

function Get-Diskinfo {param($Computername) 
   get-WmiObject win32_logicaldisk -ComputerName $Computername}

脚本为同一台计算机调用不同的函数

$MyComputerName = 'client01'
Get-DiskInfo -ComputerName $MyComputerName
Get-MoreInfo -ComputerName $MyComputerName
Get-OtherInfo -ComputerName $MyComputerName