PowerShell:使用输出中的多个值之一

时间:2018-07-12 04:09:10

标签: powershell ip command-line-interface

我能够使用ff获取为我的计算机配置的DNS服务器的IP地址:

$DNSServers = Get-DnsClientServerAddress -InterfaceAlias "Ethernet" | select -expand ServerAddresses

输出包含两个不同的IP地址值。如何提取这些值之一并将其用作AD中用于LDAP查询的变量的值?

例如,如果以上代码的输出为192.168.10.101 172.16.100.201,则我应该能够将这些IP地址值之一传递给LDAP查询代码的变量。

1 个答案:

答案 0 :(得分:3)

确定数据类型

您编写的命令将返回一个数组。您可以通过将其传递到Out-GridView来查看:

$DNSServers | Out-GridView

或检查类型:

$DNSServers.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

访问数据

可以通过索引访问数组:

$DNSServers[0]
$DNSServers[1]
etc...

请务必注意,数组索引从零开始,而不是1。

对于每个循环

循环中:

ForEach ($server in $DNSServers) {
    # Do something with server
    $server
}

用于迭代的循环

或使用数组的Count属性通过循环索引:

for ($i = 0; $i -lt $DNSServers.Count; $i++)
{ 
    $DNSServers[$i]
}

管道

还可以将对象通过管道传递给For Each,为此的简写形式为%。循环中的每个元素都被分配了内部变量$_

$DNSServers | % {
    # Do something with server ($_)
    $_
}

这不是那么容易理解,但是如果您只是编写一个一次性的快速脚本,那么它就很方便。

提示:如果您在Powershell ISE中按Ctrl + J,将打开摘要菜单,其中包含在此指定的两种类型的预构建for循环语法。但是,请注意,由于for代码段始于$i = 1,因此在与数组一起使用时需要进行更改。