Arrays 使用数组登录for循环
我正在尝试在域中的多个term.server上设置ip 我对powershell还很陌生,我曾尝试在四周搜索,以找到正确的答案 我的代码如下所示: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
$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