2016-06-29 2 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

요청 기한 :

성취 날짜 :

완료 날짜 :

첨부 : 보고서에 foo.txt 여기 https://a.com/sys_attachment.do?sys_id=829893456f90a60002da186e6b3ee402

는 두 가지 문제입니다 제가했습니다 :

  1. 스크립트는 두 번째 링크를 잡아 당겨되지 않습니다.
  2. 링크를 여는 결과 인 첨부 파일을 저장할 수 없습니다.

도와주세요.

+0

안녕하세요, '$ matches'을 (를) 확인하셨습니까? 링크가 가리키는 파일을 다운로드하고 싶다면 Chrome이 가장 좋은 선택인지 확신 할 수 없습니다 (IE 자동화 또는 'Invoke-WebRequest'). – sodawillow

+0

예, [0]과 (와) 일치하는 링크는 <> 내에 있고 [1]과 (와) 일치하지 않습니다. 성냥 [2]이 비어 있습니다. 나는 IE를 사용했지만 IE 엔진을 사용할 수 없거나 구성되지 않았다는 오류를 던졌습니다 (둘 다 유효하지 않습니다). 그래서 크롬을 사용했습니다. – 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은 다운로드 대화 상자를 여는 페이지로 리디렉션됩니다. 나는 이것을 위해 두 가지 실패한 방법을 시도했다. 1. Webclient를 사용하여 파일을 다운로드하고 저장한다. 2. IE 개체를 열고 URL로 이동합니다. WScript 셸을 만들고 저장 키를 보냅니다. 어떤 제안이라도! (죄송합니다 코드를 저장할 수 없습니다) – skrubber

+0

당신이 어떤 종류의 웹 서버에 연결하는지 모르겠습니다. URL을 예측할 수없는 경우 여기에서 더 이상 당신을 도울 수는 없을 것 같습니다. – sodawillow