编写脚本,将作为参数输入的DNS服务器放入主网卡。
服务器输入为:1.1.1.1,2.2.2.2,3.3.3.3
(有时没有三台服务器,但更多/更少)。
我想分开逗号"," - 我怎么能这样做?
我试过了,但Powershell抱怨道:
[Parameter(Position = 4)]
$a = $DNSServers
$a.Split(',')
运行脚本时,第四个参数是通过逗号分割的DNS服务器。
我会尝试马特的建议...更多信息
没想到我会得到这么多回应。道歉,由于我所在地的安全限制,我无法复制/粘贴服务器上的代码(因此再次输入所有内容时会感到痛苦)。所以,决定只复制我需要的那些 - 我认为这就足够了(显然不是!)。
该脚本将以:
运行script.ps1 IP_ADDRESS SUBNET_MASK GATEWAY DNS_SERVER
ie:script.ps1 10.1.1.1 255.255.255.0 10.1.1.254 1.1.1.1,2.2.2.2,3.3.3.3
因此,将调用的第四个参数是DNS服务器(可以有多个DNS服务器)。该参数是从用户进入DNS服务器的外部Web客户端引入的 - 但通常是3个IP地址。
哦,错误就是这个 - 我不太确定错过了什么')'PS C:\Temp> C:\Temp\ip_assign.ps1
At C:\Temp\ip_assign.ps1:14 char:17
+ $a = $DNSServers
+ ~
Missing ')' in function parameter list.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndParenthesisInFunctionParameterList
管理以获取我正在做的主要部分 - 希望这已经足够了:
param (
[Parameter(Mandatory=$true,
Position = 1)]
[string]$IP
,
[Parameter(Position = 2)]
[string]$SubnetMask = "none"
,
[Parameter(Position = 3)]
[string]$Gateway = "none"
,
[Parameter(Position = 4)]
$a = $DNSServers
$a.Split(',')
$TeamAdaptor = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object { $_.Caption -ilike '*Virtual*'}
$TeamAdaptor.EnableStatic($IP,$SubnetMask)
$TeamAdaptor.SetGateways($Gateway)
$TeamAdaptor.SetDNSServerSearchOrder("$DNSServers")
答案 0 :(得分:3)
我认为这里的问题是你没有像你想象的那样将字符串传递给参数。请考虑以下功能。
function Get-Bagel{
param(
$DnsServers
)
$DnsServers.GetType().FullName
$DnsServers
}
然后是函数调用
Get-Bagel 1.1.1.1,2.2.2.2,3.3.3.3
这将净化以下输出。
System.Object[]
1.1.1.1
2.2.2.2
3.3.3.3
由于我们使用数组表示法输入变量而您没有在声明中设置强制转换$DnsServers
实际上是一个字符串数组。这可能是您首先想要的,因此可能不需要使用.split()
。
你的搞笑错误
您缺少param()
param (
[Parameter(Mandatory=$true,
Position = 1)]
[string]$IP
,
[Parameter(Position = 2)]
[string]$SubnetMask = "none"
,
[Parameter(Position = 3)]
[string]$Gateway = "none"
,
[Parameter(Position = 4)]
[string[]]$DNSServers
)
转换为[string[]]$DNSServers
,然后不需要分割。
答案 1 :(得分:1)
您需要有一个数组变量,然后使用输入字符串上的split函数将内容拆分为数组:
$a = "1.1.1.1,2.2.2.2,3.3.3.3"
[array]$DnsServers = $a -split(",")
这将为您提供一个包含IP地址的数组$ DnsServers。在这种特殊情况下,$ DnsServers [0]为1.1.1.1,$ DnsServers [1]为2.2.2.2,$ DnsServers [2]为3.3.3.3。
答案 2 :(得分:1)
我认为Matt给出了一个可靠的答案,但在这里更简洁一点:当你指定逗号分隔的参数列表时,如下:
Get-Bagel Aaaaa,Bbbb,Cccc
PowerShell将此解释为三个单独的项目,Aaaa,Bbbb和Cccc。没有必要在逗号上分开,因为PowerShell会自动为您执行此操作