0

我正在创建一个脚本,该脚本将读取包含单列文件名(每个单元格一个)的 .csv 文档,并在更大的文件夹中搜索与提供的文件名匹配的每个文件,并使用以下方法识别“所有者”:

(get-acl $file).owner

目前我有几段代码可以完成单独的部分,但我很难将它们结合在一起。理想情况下,用户可以简单地将文件名输入到 .csv 文件中,然后运行脚本以输出第二个 .csv 或 .txt 标识每个文件名及其所有者。

csv 格式将如下所示(ASIN 为标题):

ASINs
B01M8N1D83.MAIN.PC_410
B01M14G0JV.MAIN.PC_410

拉取不带标题的文件名:

$images = Get-Content \\path\ASINs.csv | Select -skip 1

在较大的文件夹中查找图像以提取完整的文件名/路径(不起作用):

ForEach($image in $images) {

    $images.FullName | ForEach-Object

       {
       $ASIN | Get-ChildItem -Path $serverPath -Filter *.jpg -Recurse -ErrorAction SilentlyContinue -Force | Set-Content \\path\FullNames.csv
       }
}

那时,我想使用 FullNames.csv 提供的完整文件路径,使用上述方法从其本机位置的文件中提取所有者:

(get-acl $file).owner

有谁知道如何将这些组合成一个流畅的脚本?

编辑 我能够在没有循环的情况下使以下工作,读取其中一个文件名,但我需要它循环,因为有多个文件名。

新的 CSV 格式:

    BaseName
    B01LVVLSCM.MAIN.PC_410
    B01LVY65AN.MAIN.PC_410
    B01MAXORH6.MAIN.PC_410
    B01MTGEMEE.MAIN.PC_410

新脚本:

$desktopPath = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop)
$images = $desktopPath + '\Get_Owner'
Get-ChildItem -Path $images | Select BaseName | Export-Csv $desktopPath`\Filenames.csv -NoTypeInformation
$serverPath = 'C:\Users\tuggleg\Desktop\Archive'
$files = Import-Csv -Path $desktopPath`\Filenames.csv
While($true) {
ForEach ($fileName in $files.BaseName)
{
Get-ChildItem -Path $serverPath -Filter "*$fileName*" -Recurse -ErrorAction 'SilentlyContinue' |
        Select-Object -Property @{
            Name='Owner'
            Expression={(Get-Acl -Path $_.FullName).Owner}
          },'*' |
        Export-Csv -Path $desktopPath`\Owners.csv -NoTypeInformation
}
}

关于循环问题的任何想法?感谢大家!

4

1 回答 1

2

此示例假设您的 csv 包含部分文件名。它将搜索文件路径并过滤这些部分。

Example.csv

"ASINs"
"B01M8N1D83.MAIN.PC_410"
"B01M14G0JV.MAIN.PC_410"

代码.ps1

$Files = Import-Csv -Path '.\Example.csv'

ForEach ($FileName in $Files.ASINs)
{
    Get-ChildItem -Path $serverPath -Filter "*$FileName*" -Recurse -ErrorAction 'SilentlyContinue' |
        Select-Object -Property @{
            Name='Owner'
            Expression={(Get-Acl -Path $_.FullName).Owner}
          },'*' |
        Export-Csv -Path '\\path\FullNames.csv' -NoTypeInformation
}
于 2017-10-31T16:11:01.237 回答