我正在尝试导入包含大量用户和计算机信息的CSV。我正在使用此CSV来构建我的Active Directory。我正在尝试构建计算机并遇到foreach
循环的问题,我相信我可能会误解它们。这是我的代码的相关部分:
$adusercsv = Import-CSV .\tst.csv
foreach ($_.computername in $adusercsv)
{
if ($_.city -eq "Vancouver")
{
New-ADComputer -Name $_.computername -Path OU=Computers,OU=Vancouver,DC=VANDC
}
if ($_.city -eq "Calgary")
{
New-ADComputer -Name $_.computername -Path OU=Computers,OU=Calgary,DC=InternalCAL
}
}
此代码抛出语法错误:
At line:21 char:12 + foreach ($_.computername in $adusercsv) + ~ Missing 'in' after variable in foreach loop. At line:21 char:39 + foreach ($_.computername in $adusercsv) + ~ Unexpected token ')' in expression or statement. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : MissingInInForeach
如何读取数组中的每一行?
答案 0 :(得分:1)
首先,$_
是表示管道中当前对象的默认变量。您正在尝试将当前计算机分配给未定义变量的computername属性...请尝试此操作
$OUs = @{
Vancouver = 'OU=Computers,OU=Vancouver,DC=VANDC'
Calgary = 'OU=Computers,OU=Calgary,DC=InternalCal'
}
$aduserscsv = Import-CSV .\tst.csv
foreach ($row in $aduserscsv) {
New-ADComputer -Name $row.Computername -path $OU.($row.city)
}
这没有错误检入,这是可取的,但它演示了如何使用foreach (){}
循环,以及如果您的值在源数据中,您不需要检查城市的属性
答案 1 :(得分:0)
$ _用于管道中的当前值。在这种情况下,您不应该使用它。
试试这个:
adusercsv = Import-CSV .\tst.csv
foreach ($computer in $adusercsv)
{
if ($computer.city -eq "Vancouver")
{
New-ADComputer -Name $computer.computername -Path OU=Computers,OU=Vancouver,DC=VANDC
}
if ($computer.city -eq "Calgary")
{
New-ADComputer -Name $computer.computername -Path OU=Computers,OU=Calgary,DC=InternalCAL
}
}
答案 2 :(得分:-1)
在此页面上查看example。
您可以尝试这样:
$adusercsv = Import-CSV .\tst.csv
foreach ($pc in $adusercsv)
{
if ($pc.city -eq "Vancouver")
{
New-ADComputer -Name $pc.computername -Path OU=Computers,OU=Vancouver,DC=VANDC
}
if ($pc.city -eq "Calgary")
{
New-ADComputer -Name $pc.computername -Path OU=Computers,OU=Calgary,DC=InternalCAL
}
}