我是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-Object
cmdlet或作为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