这个主题与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
只有一个元素或有多个元素,脚本也可以。
答案 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"