首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递一个string-array和foreach循环不起作用:没有数组而只有一个字符串?

传递一个string-array和foreach循环不起作用:没有数组而只有一个字符串?
EN

Stack Overflow用户
提问于 2014-09-03 03:10:36
回答 2查看 103关注 0票数 1

我在一个函数中传递了一个ntp-server数组来循环访问它。这就是发生的事情:

代码语言:javascript
复制
  $srvA = @(
      '0.at.pool.ntp.org',
      '1.at.pool.ntp.org',
      '2.at.pool.ntp.org',
      '3.at.pool.ntp.org'
  )

  Function Get-NtpTime {
      param($srvList)
      $srvList
      $nSrv = $srvList.Length
      foreach ( $Server in $srvList ) {
          $nSrv--
          Write-Host $Server $nSrv
      }
  }

  Get-NtpTime $srvA
  0.at.pool.ntp.org 1.at.pool.ntp.org 2.at.pool.ntp.org 3.at.pool.ntp.org
  0.at.pool.ntp.org 1.at.pool.ntp.org 2.at.pool.ntp.org 3.at.pool.ntp.org 70

如您所见,$srvList似乎是一个弹簧,而不是一个字符串数组

$Server不是单个服务器,而是所有服务器,长度是70而不是4。

数组的定义似乎是不正确的,但是为什么以及如何定义呢?(我尝试了1行数组的版本-没有区别)

EN

回答 2

Stack Overflow用户

发布于 2014-09-03 05:06:13

您应该以数组形式键入$srvList参数。

代码语言:javascript
复制
function Get-NtpTime
{
    param(
        [string[]]
        $srvList
    )

    # ...snip...
}
票数 2
EN

Stack Overflow用户

发布于 2014-09-08 04:47:35

基于重启ISE修复了该问题的your comment,听起来$srvA在会话期间的某一时刻被声明为字符串变量。一旦使用特定类型声明,PowerShell将强制对该变量声明的类型进行任何未来赋值:

代码语言:javascript
复制
> $a = @( 'one', 'two', 'three' )  # No type declaration
> $a
one
two
three

> [string]$b = @( 'one', 'two', 'three' )  # Declared as string
> $b
one two three

> $b = @( 'four', 'five' )  # Re-using variable declared as string
> $b
four five

您可以在当前会话中修复此问题,方法是将变量重新声明为所需的类型,在本例中使用[string[]]$srvA = @( ... )

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25630616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档