2017-10-31 5 views
0

私はファイル名の単一の列(セルごとに1つ)を含む.csvドキュメントを読み込んで各ファイルのより大きなフォルダを検索するスクリプトの作成に取り組んでいます提供ファイル名を照合し、使用して「所有者」を識別します。.csvをインポートしてファイル名と対応する所有者のリストを作成する

(get-acl $file).owner 

を現在、私は、個々の部品を行うことができ、コードのいくつかのビットを持っているが、私はそれをすべて一緒同点に苦労しています。理想的には、ユーザーは単に.csvファイルにファイル名を入力し、スクリプトを実行して各ファイル名とその所有者を識別する2つ目の.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.cが提供する完全なファイルパスを使用したいと思います。上述を使用して、ネイティブの場所にあるファイルから所有者をプルするSV:

(get-acl $file).owner 

誰もが一つの流体スクリプトに一緒にこれらを結びつける方法任意のアイデアを持っていますか?

EDIT は、私は、ファイル名のいずれかを読んで、ループなしで動作するには、以下の得ることができたが、複数のファイル名があるように私はループにそれを必要とします。

新しい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 
} 
} 

ループの問題上の任意のアイデア?みんな、ありがとう!

+2

はあなたが結合しようとしている部品を提供することはできますか? csvのサンプルと並んで(ほんの数行で十分でしょう) – TheIncorrigible1

+0

あなたの質問に書式を付けてください。 – TheIncorrigible1

+0

が追加情報を要求通りに追加しました。 – Garrett

答えて

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 
} 
+0

ファイル所有者データを取得して出力することを忘れないでください。 – codemaker

+0

@codemakerリマインダをありがとう。私は例を更新しました。 – TheIncorrigible1

+0

これは素晴らしいスタートです。これを修正して、私たちが必要とするものを正確に得ることができるはずです!ありがとうございます@ TheIncorrigible1 – Garrett

関連する問題