在 foreach 中使用来自 CSV 的 属性 个名称
Using property names from a CSV in foreach
我正在尝试导入包含大量用户和计算机信息的 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
如何从数组中读取每一行?
在此页面上查看 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
}
}
$_ 用于管道中的当前值。在这种情况下,你不应该使用它。
试试这个:
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
}
}
首先,$_
是表示管道中当前对象的默认变量。您正在尝试将当前计算机分配给未定义变量的计算机名 属性...请改用此方法
$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 $OUs.($row.city)
}
这没有错误检查,这是可取的,但它演示了如何使用 foreach (){}
循环以及如何不需要检查城市的 属性 如果您值在您的源数据中
我正在尝试导入包含大量用户和计算机信息的 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
如何从数组中读取每一行?
在此页面上查看 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
}
}
$_ 用于管道中的当前值。在这种情况下,你不应该使用它。
试试这个:
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
}
}
首先,$_
是表示管道中当前对象的默认变量。您正在尝试将当前计算机分配给未定义变量的计算机名 属性...请改用此方法
$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 $OUs.($row.city)
}
这没有错误检查,这是可取的,但它演示了如何使用 foreach (){}
循环以及如何不需要检查城市的 属性 如果您值在您的源数据中