Powershell 导入.csv以创建文件名和相应所有者的列表

Powershell 导入.csv以创建文件名和相应所有者的列表,powershell,csv,filenames,file-ownership,Powershell,Csv,Filenames,File Ownership,我正在创建一个脚本,该脚本将读取包含一列文件名(每个单元格一个)的.csv文档,并在更大的文件夹中搜索与提供的文件名匹配的每个文件,并使用以下方法识别“所有者”: (get-acl $file).owner 目前,我有一些代码可以完成单个部分,但我很难将它们全部绑定在一起。理想情况下,用户只需在.csv文件中输入文件名,然后运行脚本以输出第二个.csv或.txt,标识每个文件名及其所有者 csv格式将显示如下(ASINs为标题): 拉取不带标头的文件名: $images = Get-Conte

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

(get-acl $file).owner
目前,我有一些代码可以完成单个部分,但我很难将它们全部绑定在一起。理想情况下,用户只需在.csv文件中输入文件名,然后运行脚本以输出第二个.csv或.txt,标识每个文件名及其所有者

csv格式将显示如下(ASINs为标题):

拉取不带标头的文件名:

$images = Get-Content \\path\ASINs.csv | Select -skip 1
在较大文件夹中查找图像以获取完整文件名/路径(不工作):

在这一点上,我想使用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
}
}

对循环问题有什么想法吗?谢谢大家

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

Example.csv

"ASINs"
"B01M8N1D83.MAIN.PC_410"
"B01M14G0JV.MAIN.PC_410"
代码1.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
}

本例假设您的csv包含部分文件名。它将搜索文件路径并筛选这些部分

Example.csv

"ASINs"
"B01M8N1D83.MAIN.PC_410"
"B01M14G0JV.MAIN.PC_410"
代码1.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
}

你能提供你想要组合的零件吗?除了csv样本(仅几行就足够了)之外,请用格式将其添加到您的问题中。根据要求添加其他信息。您可以提供您尝试合并的部分吗?除了csv样本(仅几行就足够了)之外,请用格式将其添加到您的问题中。请按要求添加其他信息。不要忘记检索和输出文件所有者数据。@codemaker感谢您的提醒。我已经更新了这个例子。这是一个很好的开始,我应该能够修改它,得到我们需要的东西!非常感谢@TheIncorrigible1Don’不要忘记检索和输出文件所有者数据。@codemaker感谢提醒。我已经更新了这个例子。这是一个很好的开始,我应该能够修改它,得到我们需要的东西!非常感谢@TheIncorrigible1