2016-06-29 13 views
1

電子メールの本文からリンクを抽出し、そのリンクに添付ファイルを保存しようとしています。リンクを抽出して添付ファイルを保存する - PowerShell

$Folder = "InBox" 
Add-Type -AssemblyName microsoft.office.interop.outlook 
$Outlook = New-Object -ComObject Outlook.Application 
$Namespace = $Outlook.GetNameSpace("MAPI") 
$Email = $NameSpace.Folders.Item(1).Folders.Item($Folder).Items 
$extracts = $Email | Where-Object {$_.subject -match "PITM*"} 

$extracts | ForEach-Object { 
    $email = $_.Body 
    #$lines = $email | Measure-Object -Line 

    if($email -match '<(.*?)>'){ 
    "Match Found"  
    $url = $matches[1]   
    } 
    $url 
    $output = "H:\foo.DAT" 

    $Process = new-Object System.Diagnostics.Process 
    $Process.StartInfo.WindowStyle="Hidden" 
    $Process.StartInfo.FileName="chrome.exe" 
    $Process.StartInfo.Arguments=$url 
    $Process.Start()  

} 
     $Process.Dispose()   

メール本文は、次のようになります

番号:PITM0008575を https://a.com/nav_to.do?uri=foo%3Fsys_id=58689b056f90a60002da186e6b3ee484%26sysparm_stack=u_production_item_list.do%3Fsysparm_query=active=true

依頼期日:

成就日:

完了日:

添付ファイル:

  1. スクリプトは2番目のリンクを引き上げていません:レポート https://a.com/sys_attachment.do?sys_id=829893456f90a60002da186e6b3ee402

foo.txtのここで私がきた2つの問題があります。

  • リンクを開いた結果の添付ファイルを保存できません。
  • 助けてください。

    +0

    こんにちは、 '$ matches'を確認しましたか?リンクが指しているファイルをダウンロードしたいのであれば、Chromeをあなたが最良の選択(IEの自動化、または 'Invoke-WebRequest')しているとは思わないでしょう。 – sodawillow

    +0

    はい、matches [0]は<>内のリンクを持ち、[1]と一致しません。マッチ[2]は空です。私はIEを使用しましたが、IEエンジンが利用できないか、設定されていないというエラーが投げられました(両方とも無効です)。そのため、Chromeを使用しました。 – skrubber

    答えて

    1

    これはいかがですか?

    #sample data 
    $email = "Number: PITM0008575 
    <https://a.com/nav_to.do?uri=foo%3Fsys_id=58689b056f90a60002da186e6b3ee484%26sysparm_stack=u_production_item_list.do%3Fsysparm_query=active=true> 
    
    
    Requested due date: 
    
    Fulfilled date: 
    
    Completed date: 
    
    Attachments: Report foo.txt 
    <https://a.com/sys_attachment.do?sys_id=829893456f90a60002da186e6b3ee402>" 
    
    $regex = [regex]"<(.*?)>" 
    $URLmatches = $regex.Matches($email) 
    
    $reportURL = $URLmatches.Groups[1].Value 
    $downloadURL = $URLmatches.Groups[2].Value 
    
    $output = "$env:USERPROFILE\Desktop\foo.dat" 
    (New-Object System.Net.WebClient).DownloadFile($downloadURL, $output) 
    
    +0

    ニース。リンクは抽出できますが、Groups [3] .Valueを使用して抽出できます。しかし、出力にはhtmlがあり、添付ファイルはありません。それにもかかわらず、私は努力し続けます。 – skrubber

    +0

    また、URLはダウンロードダイアログを開くページにリダイレクトされます。私は2つの方法を試してみました:1. Webclientを使用してファイルをダウンロードして保存します。 2. IEオブジェクトを開き、URLにナビゲートします。 WScriptシェルを作成し、保存キーを送信します。助言がありますか! (コードを保存できません) – skrubber

    +0

    接続しているWebサーバーの種類がわかりません。URLが予測できない場合は、ここでさらにお手伝いできません。 – sodawillow

    関連する問題