我正在创建一个脚本,该脚本将读取包含单列文件名(每个单元格一个)的.csv文档,并为匹配所提供文件名的每个文件搜索更大的文件夹,并使用以下内容标识“所有者”:
(get-acl $file).owner
目前我有几个代码可以做单独的部分,但我很难将它们捆绑在一起。理想情况下,用户只需将文件名输入到.csv文件中,然后运行该脚本即可输出第二个.csv或.txt标识每个文件名及其所有者。
csv格式将显示如下(ASINs是标题):
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
}
}
关于循环问题的任何想法?谢谢大家!
答案 0 :(得分:2)
此示例假定您的csv包含部分文件名。它将搜索文件路径并过滤这些部分。
Example.csv
"ASINs"
"B01M8N1D83.MAIN.PC_410"
"B01M14G0JV.MAIN.PC_410"
Code.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
}