如何让 PS 脚本针对 csv 的每一行运行?

如何让 PS 脚本针对 csv 的每一行运行?

我目前有一个 PS 脚本,用于修复混合 O365/On-prem AD 环境中被泄露的用户帐户。该脚本目前按预期运行,可启用 MFA、日志记录、重置密码、删除邮箱规则等。

有时我们必须修复的不仅仅是几个帐户。话虽如此,我还是尝试设置脚本,逐行浏览带有标题的 CSV 文件,以提取用户 UPN 名称,并对 csv 中的每个 UPN 名称执行脚本。

目前,脚本无法同时为每个函数获取和运行多个输入,因此脚本需要重新运行。此外,脚本每次运行时都会提取 cmdlet 等,如果能够通过保持初始会话打开来加快脚本速度,那就更好了。

理想情况下,结果是脚本继续运行而不需要我输入另一个 UPN。

答案1

使用后,import-csv您可以用 循环遍历每个项目foreach

$myCSV = import-csv $theCSVfile

foreach($row in $myCSV){
    myPSscript($row.UPNname)
}

或者使用 PS 脚本中的新数据更新 $row.UPNname 字段:

$myCSV = import-csv $theCSVfile

foreach($row in $myCSV){
    $newUPNname = myPSscript($row.UPNname)
    $row.UPNname = $newUPNname
}
export-csv $myCSV

如果您要处理的不仅仅是 UPNname,那么您将需要传递这些字段或整个记录($row)的数据。

$myCSV = import-csv $theCSVfile
$mynewCSV = @()
foreach($row in $myCSV){
    $newRow = myPSscript($row)
    $mynewCSV += $newRow
}
export-csv $mynewCSV

相关内容