Arrays 使用数组登录for循环

Arrays 使用数组登录for循环,arrays,powershell,invoke-command,Arrays,Powershell,Invoke Command,我正在尝试在域中的多个term.server上设置ip 我对powershell还很陌生,我曾尝试在四周搜索,以找到正确的答案 我的代码如下所示: $adcomputere = (Get-ADComputer -filter * | Where-Object name -like term*srv).Name for ($i = 0; $i -lt $adcomputere.count -1; $i++) ` { $cred = New-object system.managem

我正在尝试在域中的多个term.server上设置ip

我对powershell还很陌生,我曾尝试在四周搜索,以找到正确的答案

我的代码如下所示:

$adcomputere = (Get-ADComputer -filter * | Where-Object name -like term*srv).Name

for ($i = 0; $i -lt $adcomputere.count -1; $i++) `
{   
    $cred = New-object system.management.automation.PSCredential ("$adcomputere[$i]\administrator",(ConvertTo-SecureString 'P@ssword' -AsPlainText -Force))

    Invoke-Command -ComputerName $adcomputere[$i] -Credential $cred -ScriptBlock `
    {
      Set-Printer -Name Mommark-vaegt2 -PortName 192.168.48.43
    } & $adcomputere
} 
我的问题是$adcomputere[$i]的使用。我得到这个错误:

ParserError: 
Line |
   1 |  …  Invoke-Command -ComputerName ${using:adcomputere}[${using:i}] -Crede …
     |                                                       ~~~~~~~~~~
     | Expression is not allowed in a Using expression.
有人能帮我选择正确的路线吗


我知道你自己也尝试过,有一些聪明的想法,但是循环可以做得容易得多:

FOR循环容易出现人为错误。其中两个可以在您的脚本中看到。首先是枚举。您的计数从0到1小于(
-lt
)您的结果数-1(
$adcomputere.count-1
)。总共少了两个。如果计数为3,则计数为小于3-1的数字,即0和1。
另一个错误是当您试图在字符串
“$adcomputere[$i]\administrator”
中的此位置使用对象时。字符串将计算这两个变量,并将
[
]
作为字符串的一部分。这将是一行中所有计算机的名称+
[$i]
。一种方法是使用
“${$adcomputere[$i]}\administrator”
首先评估
${}
中的部分,并在字符串中使用该部分。然而,有一个更容易的选择

使用FOREACH:您可以仅对对象集合使用
FOREACH
,这样每个循环中使用的对象都是
$\u
$adcomputere | FOREACH{}
),或者自己命名变量以增强可读性
FOREACH($adcomputere中的computer){}
。现在让我们来看第二个:

foreach ($Computer in $adcomputere ) # No need for "`". FOR, IF, FOREACH and the others expect {} after () anyway
{
    $cred = New-object system.management.automation.PSCredential ("$Computer\administrator",(ConvertTo-SecureString 'P@ssword' -AsPlainText -Force))

    Invoke-Command -ComputerName $Computer -Credential $cred -ScriptBlock `
        {
            Set-Printer -Name Mommark-vaegt2 -PortName 192.168.48.43
        } #& $adcomputere       < you don't need that. That would execute $adcomputere if it was a scriptblock and causes an error at this position
}

错误与您的脚本不匹配…只是添加了一张图片来显示错误。您是否直接在powershell中而不是在终端中进行了尝试?
$Computer = $adcomputere[0]
$cred = New-object system.management.automation.PSCredential ("$Computer\administrator",(ConvertTo-SecureString 'P@ssword' -AsPlainText -Force))
Enter-PSSession -ComputerName $Computer -Credential $cred
# exit with Exit-PSSession or just exit