如何编写一个正确循环的脚本,即使数组中只有一个元素?

时间:2016-01-19 21:22:37

标签: arrays loops powershell

这个主题与AzurePowershell没有关系,但是我这样做并坚持这个问题,我将以此为例。

我有这样的代码,

Select-AzureSubscription -SubscriptionName  "YouGo"  

$Sqldatabaseserver = Get-AzureSqlDatabaseServer
$ServerName = $Sqldatabaseserver | select -ExpandProperty ServerName

$ServerName

for($y = 0; $y -le $ServerName.Length -1; $y++){
  $YouGoServerNames = $ServerName[$y]
  $YouGoServerNames
  #Get-AzureSqlDatabase -ServerName $YouGoServerNames
}

$Servername有多个元素时,此脚本就像这样工作

$ServerName
cat
fish
bird
horse
tiger
cat
fish
bird
horse
tiger

但是当$Servername只有一个元素时,它就会回显并且我的脚本无效。

dog
d
o
g

我想像这样回应,就像$ServerName有多个元素一样。

dog
dog

我想写一个脚本,即使$Servename只有一个元素或有多个元素,脚本也可以。

3 个答案:

答案 0 :(得分:4)

您可以通过将其包装在数组运算符@()中来强制它成为数组:

$ServerName = @($Sqldatabaseserver | Select-Object -ExpandProperty ServerName)

此方法在早期版本的PowerShell中非常常见。

答案 1 :(得分:4)

试试这个:

$x = "abc" | select  -first 1
for($i = 0; $i -le $x.Length -1; $i++) { $x[$i] }

# a
# b
# c

$x.GetType().Name #String

$x = @("abc" | select  -first 1)
for($i = 0; $i -le $x.Length -1; $i++) { $x[$i] }

# abc

$x.GetType().Name #Array

所以,你的电话:

$ServerName= $Sqldatabaseserver | select -ExpandProperty ServerName

应该改写:

$ServerName= @($Sqldatabaseserver | select -ExpandProperty ServerName)

答案 2 :(得分:2)

尽管有Foreach循环,但尝试使用use For循环。 Foreach将进入循环,即使它包含一个元素,即使它退出一个元素,它也将其作为集合进行管理:

$servername = "dog"
foreach ($srv in $servername) {Write-Host $srv}

给出:

"dog"