在foreach中使用CSV中的属性名称

时间:2016-04-18 15:05:40

标签: powershell active-directory powershell-v4.0

我正在尝试导入包含大量用户和计算机信息的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

如何读取数组中的每一行?

3 个答案:

答案 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
}
}