代码之家  ›  专栏  ›  技术社区  ›  Jee

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

  •  0
  • Jee  · 技术社区  · 6 年前

    我可以使用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 回复  |  直到 6 年前
        1
  •  3
  •   mjsqu    6 年前

    确定数据类型

    您编写的命令返回一个数组。你可以把它传给 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
    }
    

    带迭代的for循环

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

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

    管道

    您还可以将对象管道化为for each,其简写符号是 % 是的。循环中的每个元素都被分配了内部变量 $_ 以下内容:

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

    这不是可读的,但如果你只是写一个一次性使用的快速脚本,这很方便。

    提示:如果在powershell ise中按ctrl+j,将打开snippets菜单,其中包含预构建的 for 两种类型的循环语法。但是,要小心,因为 对于 代码段起始于 $i = 1 ,因此在与数组一起使用时需要更改它。