我导入了一个CSV文件,并将导入的信息缩小为包含2行数据($updateAnchorage
),当我调用$updateAnchorage
时,它包含我期望的数据。然后我使用foreach循环从导入的数据创建了2个哈希表,我将在下面给出。我试图更好地理解PowerShell,所以我的问题是为什么foreach循环中的$row
只提供一行数据,而我希望它显示2行?
以下是代码和结果:
$updateA = Import-Csv -Path C:\Windows\System32\MyFile-CSV.csv `
-Header "name","old","new" | select -Skip 2
$hashIP = @{}
$hashName = @{}
foreach($row in $updateA)
{
$hashIP[$row.old] = $row.new
$hashName[$row.new] = $row.Name
}
以下是$updateA
和$rows
的输出:
PS C:\ Users \ a> $ updateA 旧名新 ---- --- ---
城市 - HP LaserJet 4250N - 销售... 192.168.2.120 192.168.2.50
城市 - 利盟XM1145 - 销售公司... 192.168.2.106 192.168.2.51PS C:\ Users \ a> $行
姓旧新郎 ---- --- ---
城市 - 利盟XM1145 - 销售公司... 192.168.2.106 192.168.2.51
答案 0 :(得分:1)
$ Row将是通过foreach构造的最后一件事。您需要调用$ hashIP或$ hashName。
这是您的脚本创建的内容:
[nickj@nick-lt scripts]$ $hashIP
Name Value
---- -----
2.2.2.2 2.2.2.3
1.1.1.1 1.1.1.2
[nickj@nick-lt scripts]$ $hashName
Name Value
---- -----
2.2.2.3 Name2
1.1.1.2 Name1
我的CSV:
"Name","Old","New"
Name1,1.1.1.1,1.1.1.2
Name2,2.2.2.2,2.2.2.3
如果你做了这样简单的事情:
$Array = 1,2,3,4,5
foreach ($Num in $Array)
{
continue
}
运行$Num
时,$Row
等于'{1}}将是'5',因为它将是数组传递foreach结构的最后一件事。它基本上是这样做的:
$Array = 1,2,3,4,5
$Num = $Array[0]
# Continue
$Num = $Array[1]
# Continue
$Num = $Array[2]
# Continue
$Num = $Array[3]
# Continue
$Num = $Array[4]
# Continue
因此,通过每个循环,$ Num被设置为它正在处理的当前数组值。如果您将其描绘为foreach (<WHAT> in <COLLECTION>) {}
,则只应在foreach的括号内引用<WHAT>
。它在外面变得无用。