【问题标题】:Powershell: get-childitem folder from csvPowershell:从 csv 获取子项文件夹
【发布时间】:2024-04-25 17:45:01
【问题描述】:

我正在尝试获取 Get-ChildItem 的结果以从 CSV 过滤这些文件夹的列表

我有许多与用户 SamAccountName 同名的主文件夹(和往常一样)

所有主文件夹都存储在我的共享中: \域名\用户

我的 CSV 包含与主文件夹同名的用户 示例:

SamAccountName
123456
123457
123458

我想要处理的脚本部分如下所示:

$SAM = import-csv "C:\Scripts\HomeDrive.csv"
$HomeDriveSharePath = "\\Domain\users"
$HomeDirectories = Get-ChildItem $HomeDriveSharePath | Where {$_.Name -Match $SAM.samaccountname -AND $_.PsIsContainer -eq $true}

对于我的 CSV,这不会返回任何结果(尽管 CSV 中示例用户的文件夹肯定存在)

如果我运行它,它会返回所有主文件夹(应该如此)

Get-ChildItem $HomeDriveSharePath

如果我运行这个:

$HomeDirectories = Get-ChildItem $HomeDriveSharePath | Where {$_.Name -Match "123456" -AND $_.PsIsContainer -eq $true}

然后我确实显示了相应的文件夹(证明行类型有效并且该文件夹确实存在)

这需要为数百个用户运行迁移,否则我只能坐在这里手动进行:-(

第一次发帖,如果格式或解释不正确,请道歉...彻底搜索该网站,Google 并没有恢复我似乎拥有的确切场景。

我很困惑...感谢您的帮助,

谢谢

【问题讨论】:

  • 尝试将 $SAM.samaccountname 替换为 $SAM.samaccountname.trim()
  • 嗨,安东尼。我按照建议尝试并得到了以下输出: Get-ChildItem :输入对象不能绑定到命令的任何参数,因为命令不接受管道输入,或者输入及其属性与任何接受管道的参数都不匹配输入。在 line:1 char:42

标签: csv powershell get-childitem home-directory


【解决方案1】:
$SAM = import-csv "C:\Scripts\HomeDrive.csv"
$HomeDriveSharePath = "\\Domain\users"
$HomeDirectories = Get-ChildItem $HomeDriveSharePath | Where {$_.PsIsContainer}

$HomeDirectories = $(foreach ($name in $sam) {
    $HomeDirectories | ? {$_.name -match $name.samaccountname.trim()}
})

$HomeDirectories = $sam | % { dir $HomeDriveSharePath -Filter $_.samaccountname.trim() -Directory -Name }

【讨论】:

  • 这确实会在输出中返回所有正确的文件夹,但是,谢谢,输出不包含在变量 $HomeDirectories 中,这是我真正需要的(所以像我的原始示例)...我将其传递到脚本的不同部分,该部分按预期工作。另一方面,foreeach 循环非常慢。
  • 嗨 Anthony,您的第一个示例有效,我已将其添加到我正在运行的脚本中 :-) 您的第二个示例实际上并没有返回文件夹名称(只是 $ SAM csv。)