【问题标题】:PowerShell How to loop a script based on script array countPowerShell 如何根据脚本数组计数循环脚本
【发布时间】:2021-05-21 19:41:58
【问题描述】:

我是 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"
}

【问题讨论】:

    标签: arrays powershell loops


    【解决方案1】:

    如果我理解正确的话。您想将Get-Aduser 中的用户信息附加到您从中获取的用户名的相应 csv 文件中吗?例如,jim info 转到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 循环可以以 3 种不同的方式使用: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
    

    【讨论】:

    • 我想问一下我是否可以,您为什么要将所有信息附加到每个用户的新 CSV 中?您是否想从用户那里收集特定信息?
    • 谢谢亚伯拉罕,是的,我正在尝试从用户那里提取电子邮件地址并将其放在一个唯一的 csv 文件中。对于第二个数组 $csvfile,我可以预先创建与用户关联的现有索引,两个数组中的索引相同吗?因此,不是“jim”转移到“jim.csv”,我怎么能创建他的 CEO.csv 职位,并让他的信息自动在 [0] 索引,然后说下一个用户,“john”索引在 [1] 在 CFO .csv?
    • @GoodFox,您正在寻找的是for 循环。见编辑。
    • 这太棒了!谢谢!
    • 很高兴听到,如果您想了解更多关于 for 循环如何工作的信息,请告诉我,我会再次编辑帖子并提供相关信息以供将来参考。
    猜你喜欢
    • 2013-08-29
    • 2021-11-22
    • 2017-04-17
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多