PowerShell如何根据脚本数组计数循环脚本



我是PowerShell的新手。我正在试着提取一个用户名并将其放入一个文件中。我有两个相应的数组,$title和$csvfile。$title[0]对应$csvfile[0], $title[1]对应$csvfile[1],以此类推。是否有可能在循环此脚本的同时增加索引,以便每个索引运行一次,但也是同步的?

$title = @('jim' 'john' 'james')
$csvfile = @('jim.csv' 'john.csv' 'james.csv')
Get -ADUser -filter {(Title -like "$title") -and (Company -like "Location1")} | Export-Csv c:temp$csvfile

问题2$title数组似乎不是一次迭代一个。如果我将$title[$]替换为任何列出的数组项,它就可以工作了。有趣的是,它确实从$csvfile数组创建了我所有的。csv文件,它们只是空的。我已经做了一些在网上看,不确定如果我的数组项目是长或报价不解析正确。如有任何帮助,我将不胜感激。

$title = @(
'Director of Nursing'
'Assistant Director of Nursing'
'Activities Director'
)
$csvfile = @(
'DON'
'ADON'
'ACTIVITIES'
)
for($i=0; $i -lt $title.Count; $i++)
{
#Get-ADUser -Filter { (Title -like "Director of Nursing")  -and  (Company -like "location1") }| Export-Csv c:temp$($csvfile[$i]).csv"
Get-ADUser -filter { (Title -like "$($title[$i])")  -and  (Company -like "Location1") }| Export-Csv "c:tempPath$($csvfile[$i]).csv"
}

如果我理解正确的话。您想将来自Get-Aduser的用户信息附加到您从中获得的用户名的相应csv中吗?比如,jim信息变成了jim.csv,以此类推?

似乎你在寻找Foreach循环。

$title = @('jim','john','james')
#$csvfile = @('jim.csv' 'john.csv' 'james.csv')
Foreach($user in $title){
Get-ADUser -filter {(Title -like "$title") -and (Company -like "Location1")} | Export-Csv "c:temp$title.csv"}

Foreach循环遍历对象列表,并对每个对象执行相同的操作,在完成最后一个对象时结束。对象列表通常是一个数组。当你在一个对象列表上运行循环时,我们说你在列表上运行iterating

Foreach循环可以以三种不同的方式使用:Foreach语句,Foreach-Objectcmdlet或作为foreach()方法。

我们在这里使用的是Foreach语句,后面跟着包含三个元素的括号,依次是:变量、关键字in和要迭代的对象或数组。当它遍历列表(在本例中是$title-array)时,Powershell会将它正在查看的对象复制到定义列表中每个项目的变量$user中。

注意:因为变量只是一个拷贝,你不能直接改变原列表中的项。

也请注意,数组中的项是通过在列表中的每个项的末尾添加逗号来单独读取的(如果它不在新行中)。在上面的代码中,我们也将迭代使用的相同名称附加到csv文件中。

编辑:使用for循环…


$title = @('jim','john','james')
$csvfile = @('CEO','CFO','CIO')

For($i=0; $i -lt $title.Count; $i++){
Get-ADUser -filter {(Title -like "$($title[$i])") -and (Company -like "Location1")} | Export-Csv "c:temp$($csvfile[$i]).csv"}

匹配如下输出:

jim - CEO.csv
john - CFO.csv
james - CIO.csv

最新更新