你好,PS v4(从2012服务器运行)对用V2编写的Foreach循环的反应有何不同?
我有这个简单的脚本在v2中工作但在v4上产生错误:
$Serverlist = Import-CSV "D:\PendingReboot\AllADServers.csv"
Foreach ($Computer.Name in $Serverlist)
{
$ADComputer = $Computer.Name
$ADOwner = $Computer.Description
If (!($Computer.Description))
{$ADOwner = "Unassigned"}
$ADOU = $AD | select DistinguishedName
"$ADComputer $ADOwner"
}
Server1 Team1
Server2 Team2
etc. etc.
V4中的错误是:
At D:\PendingReboot\Test.ps1:2 char:23
+ Foreach ($Computer.Name in $Serverlist)
+ ~
Missing 'in' after variable in foreach loop.
At D:\PendingReboot\Test.ps1:2 char:43
+ Foreach ($Computer.Name in $Serverlist)
+ ~
Unexpected token ')' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingInInForeach
答案 0 :(得分:3)
PetSerAl的评论是正确的。您应该使用foreach ($Computer in $ServerList)
。至于为什么它在PowerShell v2中运行而不在v4中,我只能假设他们纠正了行为,因为它应该在v2中失败。
基本上你的.Name
部分没有做任何事情,因为你仍然需要在循环的第一行指定.Name
。
基本上,这是一个语法错误,未在早期版本中捕获。