2017-11-23 4 views
0

私はオンラインで見つかったスクリプトを変更して、SharePointライブラリをループし、ドキュメントをリストとして抽出しました。それはすべて正常に動作し、私はユーザーごとにきれいにソートされ、グループ化されたHTML出力ファイルを得て、それは私に電子メールで送られています。Powershellが特定のドキュメントを抽出するためにSharePointライブラリをループする

このスクリプトをさらに変更して、各ユーザーにユーザー文書だけで電子メールを送信できるようにする必要があります。 これまでのところ、ユーザーごとに別々のファイルを作成し、ユーザー文書のみでユーザーに電子メールを送信するようにしましたが、各ユーザーレポートには最初の文書が常にありません。つまり、ユーザーからのドキュメントが1つだけの場合、作成されたファイルにはコンテンツがありません。

はコードの下を参照してください:

foreach($list in $alllistcol){ 

    if (($excludeLists -notcontains $list.Title) -and ($list.Basetype -eq "1")) 
    { 
     $files = GetListItems -site $site.Url -listname $list.Title 

     # Loop through each file in the document library and perform the following 
     #$files | Sort-Object -Property CreatedBy 

     $lastAuthor = $file.ows_Author 

     foreach($file in $files) 
     { 
      #Write-host "$($site.Title),$($list.Title),$($file.ows_LinkFileName)" 
      #Write-Host "$($file.ows_LinkFileName)" 

      # Use the following to add additional metadata columns 

      if($lastAuthor -ne $file.ows_Author) 
      { 
       $AuthorFile = FileOutput 
       SendEmail -outfile $AuthorFile -Author ($file.ows_Author -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
       $output = @() 
       $lastAuthor = $file.ows_Author 
      }else{ 
       $record = new-object System.Object 
       #$record | Add-Member -type NoteProperty -name Site -value $site.Title 
       #$record | Add-Member -type NoteProperty -name List -value $list.Title 
       #$record | Add-Member -type NoteProperty -name FileTitle -value $file.ows_Title 
       $record | Add-Member -type NoteProperty -name Filename -value $file.ows_LinkFileName 
       #$record | Add-Member -type NoteProperty -name Created -value $file.ows_Created 
       $record | Add-Member -type NoteProperty -name CreatedBy -value ($file.ows_Author -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
       $record | Add-Member -type NoteProperty -name ExpiryDate -value $file.ows_Expiry_x0020_Date 
       #$record | Add-Member -type NoteProperty -name Modified -value $file.ows_Modified 
       #$record | Add-Member -type NoteProperty -name ModifiedBy -value $file.ows_Editor 
       #$record | Add-Member -type NoteProperty -name ContentType -value $file.ows_ContentType 
       #if ($file.ows_File_x0020_Size) 
       #{ 
       # $record | Add-Member -type NoteProperty -name Filesize -value $file.ows_File_x0020_Size.split("([^#]+$)'")[-1] 
       #} 
       $output += $record 
       $countfiles++ 

       #$output += "$($site.Title),$($list.Title),$($file.ows_Title),$($file.ows_LinkFileName),$($file.ows_Created)" 
      } 
     } 
    } 
} 

私は問題がラインであると思う:実際には$ファイルを宣言する前に$ lastAuthor = $ file.ows_Author。各著者の最初の文書をスキップせずに、新しいファイルを閉じて開くために、文書の著者を比較するにはどうすればよいですか?

---------------------------------------------- - - - - - - - - -更新 - - - - - - - - - - - - - - - - ----------------------------

私は、最初の文書が現在スキップされているという問題を修正しました。著者で私のクエリの種類を何とかそれが最後の著者をループしません:

if($lastAuthor -ne $file.ows_Author) 
      { 
       FileOutput 
       SendEmail -Author ($file.ows_Author -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
       #$output = $null 
       $output = @() 
       #$lastAuthor = $null 
       $lastAuthor = $file.ows_Author 
       $record = new-object System.Object 
       $record | Add-Member -type NoteProperty -name Filename -value $file.ows_LinkFileName 
       $record | Add-Member -type NoteProperty -name CreatedBy -value ($file.ows_Author -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
       $record | Add-Member -type NoteProperty -name ExpiryDate -value $file.ows_Expiry_x0020_Date 
       $output += $record 
       $countfiles++ 
      }else{ 
       $record = new-object System.Object 
       #$record | Add-Member -type NoteProperty -name Site -value $site.Title 
       #$record | Add-Member -type NoteProperty -name List -value $list.Title 
       #$record | Add-Member -type NoteProperty -name FileTitle -value $file.ows_Title 
       $record | Add-Member -type NoteProperty -name Filename -value $file.ows_LinkFileName 
       #$record | Add-Member -type NoteProperty -name Created -value $file.ows_Created 
       $record | Add-Member -type NoteProperty -name CreatedBy -value ($file.ows_Author -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
       $record | Add-Member -type NoteProperty -name ExpiryDate -value $file.ows_Expiry_x0020_Date 
       #$record | Add-Member -type NoteProperty -name Modified -value $file.ows_Modified 
       #$record | Add-Member -type NoteProperty -name ModifiedBy -value $file.ows_Editor 
       #$record | Add-Member -type NoteProperty -name ContentType -value $file.ows_ContentType 
       #if ($file.ows_File_x0020_Size) 
       #{ 
       # $record | Add-Member -type NoteProperty -name Filesize -value $file.ows_File_x0020_Size.split("([^#]+$)'")[-1] 
       #} 
       $output += $record 
       $countfiles++ 

       #$output += "$($site.Title),$($list.Title),$($file.ows_Title),$($file.ows_LinkFileName),$($file.ows_Created)" 
      } 

残念ながら、私は別の問題を発見しました。例:私はAmber、Mary、Sally、Wayneの4人の作家がいます。アンバー、メアリー、サリーのすべてが問題ありません。ファイルは正しく作成され、電子メールは正しく送信されます。今ウェインのファイルには内容がなく、原因の電子メールにも表示する文書はありません。何か案が?

答えて

0

私が固定されている問題で自分自身:D

if (($excludeLists -notcontains $list.Title) -and ($list.Basetype -eq "1")) 
    { 
     $files = GetListItems -site $site.Url -listname $list.Title 

     # Loop through each file in the document library and perform the following 
     #$files | Sort-Object -Property CreatedBy 

     $lastAuthor = $null 

     foreach($file in $files) 
     { 
      #Write-host "$($site.Title),$($list.Title),$($file.ows_LinkFileName)" 
      #Write-Host "$($file.ows_LinkFileName)" 

      # Use the following to add additional metadata columns 

      if($lastAuthor -eq $null) 
      { 
       $lastAuthor = $file.ows_Author 
      } 

      if($lastAuthor -ne $file.ows_Author) 
      { 
       FileOutput 
       SendEmail -Author ($lastAuthor -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
       #$output = $null 
       $output = @() 
       #$lastAuthor = $null 
       $lastAuthor = $file.ows_Author 
      } 
      $record = new-object System.Object 
      #$record | Add-Member -type NoteProperty -name Site -value $site.Title 
      #$record | Add-Member -type NoteProperty -name List -value $list.Title 
      #$record | Add-Member -type NoteProperty -name FileTitle -value $file.ows_Title 
      $record | Add-Member -type NoteProperty -name Filename -value $file.ows_LinkFileName 
      #$record | Add-Member -type NoteProperty -name Created -value $file.ows_Created 
      $record | Add-Member -type NoteProperty -name CreatedBy -value ($file.ows_Author -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
      $record | Add-Member -type NoteProperty -name ExpiryDate -value $file.ows_Expiry_x0020_Date 
      #$record | Add-Member -type NoteProperty -name Modified -value $file.ows_Modified 
      #$record | Add-Member -type NoteProperty -name ModifiedBy -value $file.ows_Editor 
      #$record | Add-Member -type NoteProperty -name ContentType -value $file.ows_ContentType 
      #if ($file.ows_File_x0020_Size) 
      #{ 
      # $record | Add-Member -type NoteProperty -name Filesize -value $file.ows_File_x0020_Size.split("([^#]+$)'")[-1] 
      #} 
      $output += $record 
      $countfiles++ 

      #$output += "$($site.Title),$($list.Title),$($file.ows_Title),$($file.ows_LinkFileName),$($file.ows_Created)" 

      if($files.IndexOf($file) -eq ($files.Count -1)) 
      { 
       FileOutput 
       SendEmail -Author ($lastAuthor -replace '[ ](?=[ ])|[^-_,A-Za-z ]+', '') 
      } 
     } 
    } 

ファイルは、foreachの反復の最後で、ファイルを作成し、最後の著者に電子メールを送信する場合はチェックしている場合は、最後の。

関連する問題