powershell中的函数和参数

时间:2014-10-20 12:08:57

标签: function powershell parameters scripting

如何在脚本中添加多个函数,然后通过输入参数调用它们?例如,在下面的代码中它改变了局部区域连接中的配置,所以我想调用函数,如SscriptNAme -Change 192.168.0.1,255.255.255.255,192.168.0.2。我希望在同一个脚本中有其他功能,我也想通过输入参数来调用:

function Change{

$S=$executionContext.InvokeCommand.NewScriptBlock("netsh interface ip set address name = 'Local              Area Connection' source=static addr=$args[0] mask=$args[1] gateway=$args[2] gwmetric=0")

}

function ChangeOne{ 

$S=$executionContext.InvokeCommand.NewScriptBlock("netsh interface ip set address name = 'Local   Area Connection' source=static addr=$args[0] mask=$args[1] gateway=$args[2] gwmetric=0")

}

有人可以告诉我,我是否正确的方向,并给我一些指导如何做到这一点。感谢

2 个答案:

答案 0 :(得分:1)

你可以通过1个谷歌查询找到这个但是你去了:

function Change{
param(
[parameter(Mandatory=$true,Position=0)]
[string] $address,
[parameter(Mandatory=$true)]
[string] $mask,
[parameter(Mandatory=$true)]
[string] $gw,
[int] $metric=0
)

Do Stuff

}

用于调用函数:

Change -address $address -mask $mask -gw $gw -metric $metric

指标不是必需的,默认为0.

参数address,mask和gw如果包含值,也会得到testet,如果其中一个必需参数为空或者不存在,该函数将抛出错误。

您还可以将参数分配给一个位置,这样您就不必使用这样的调用标记(在地址上显示):

Change $address -mask $mask -gw $gw

有关参数的更多信息:

Technet

但是我建议你不要以这种方式使用netsh甚至invoke-expression,这种东西有cmdlet!例如:

Get-NetAdapter "Ethernet" | New-NetIPAddress $address -Defaultgateway $gw -PrefixLength $sn

答案 1 :(得分:0)

function Change
{
    param($addr, $mask, $gw, $metric=0)
    $S=$executionContext.InvokeCommand.NewScriptBlock("netsh interface ip set address name='Local              Area Connection' source=static addr=$addr mask=$mask gateway=$gw gwmetric=$metric")

}

#To call use this, note, no commas between args, and $metric is defined 0 by default.
Change 192.168.0.2 255.255.255.255 192.168.0.1