2017-07-20 40 views
-1

私はファイル共有レポートのレイアウトを操作しようとしています。基本的にレイアウトは次のようになります。複雑な転置テーブル(PowershellまたはExcel)

Path,Username/Group 
path1,user1 
path2,user1 
path3,user1 
path1,user2 
path3,group1 
path2,group2 

これは、フォルダのパスとユーザーがアクセスできることを示しています。 私は、次のレイアウトに変更したいと思います:

user1,user2,group1,group2 
path1,path1,path3,path2 
path2 
path3 

それはExcelにデータをインポートし、Excelでそれを操作したり、データを操作するためのPowerShellスクリプトを使用するかどうか、私は何に非常にわからないんだけど私が望むようにそれを得るためにしてください。

このテキストファイルをExcelにインポートして転記しようとしましたが、各ユーザーのファイルパスの一覧を表示する方法がわかりません。私もAccessでそれを使いこなしましたが、私はそれが適切に表示されるのに十分な経験がありません。私はpowershellでいくつかのことを試しましたが、各文書のファイルパスのリストを持つユーザーの名前を付けられた一連のテキスト文書になりました。残念ながら私はそれが好きであるようにきちんとしていません。

答えて

1

PowerShellできます。質問に表示されているデータであれば、CSVファイルのように見えます。

$DataIn = Import-CSV $file 
$HTOut = @{} 
$File | Group 'Username/Group' | ForEach{$HTOut.add($_.Name,$_.Group.Path)} 
New-Object PSObject -Prop $HTOut | Export-CSV $file 

私はそれについて考え、そしてこれは、私が言っていた正確に何をしない、それは各ユーザー/グループのプロパティを一つのオブジェクトになるだろう、とそのプロパティの値は、すべてを次のようになります。あなたは何ができますその人/グループのパス。あなたが本当に望むのは、それらのパスのすべてを反復するXオブジェクトです。そのため、最初の3行は、ほとんどのパスを持つユーザー/グループのパス数を取得する点を除いて、同じままです。次に、多くのオブジェクトを各ユーザーのパスを通して繰り返します。

$DataIn = Import-CSV $file 
$HTOut = @{} 
$MaxPaths = $DataIn | Group 'Username/Group' | ForEach{$HTOut.add($_.Name,$_.Group.Path);$_} |% Count |Sort -Descend |Select -first 1 
$Results = For($i=0;$i -le $MaxPaths;$i++){ 
    $Record = New-Object PSObject 
    $HTOut.Keys|ForEach{Add-Member -InputObject $Record -NotePropertyName $_ -NotePropertyValue $(([array]$HTOut["$_"])[$i])} 
    $Record 
} 
+0

私が言ったことは、あなたが投稿したスクリプトが、私にはかなり変わった見た目のCSVを与えたと言いました。笑。私はできるだけ早くあなたの第二の解決策を試してみて、報告するつもりです。お手伝いありがとう。 – takeitback

+0

2番目のスクリプトを実行した後に新しいCSVを開いたときに、空のワークシートがあります。 – takeitback

+0

ええ、私は自分のコードをテストしなかった、私はちょうど私の頭の上からそれを書いた。私はそれを固定し、それをテストしました、そして、今は行くのが良いはずです。 – TheMadTechnician