저는 PowerShell을 처음 접했고 지식에 한계가 있습니다. 내부 웹 페이지에서 백업 데이터를 긁어 내고 긁힌 자국에서 정보를 추출하여 조작하고 나중에 Excel에 표시하는 스크립트를 작성하고 있습니다.Powershell : http 스크린 스크랩 및 특정 라인을 변수로 반환
$Yesterday = [DateTime]::Now.AddDays(-1)
$datestr = $Yesterday.ToString("dd-MMM-yyyy")
$WebClient = New-Object System.Net.WebClient
$Results = $WebClient.DownloadString("http://fakeurl")
이렇게하면 http 코드와 관심있는 데이터가 모두 포함되어 있지만 모두 함께 묶어서 출력됩니다. 그러면 다음을 수행합니다.
[StringSplitOptions]$option = "None"
[string[]]$separator = "</td>"
$SPL = $Results.Split($separator, $option)
이렇게하면 데이터를보다 읽기 쉬운 형식으로 나눌 수 있습니다. 다음은 $ SPL에 관심이있는 섹션의 스 니펫입니다. 내가 경과 시간을 작업 시작 및 종료 시간을 추출하고, 또한 가장 최근의 백업의 EXIT_STATUS를 반환해야이에서
<tr><td headers="HOST_NAME" class="t13dataalt">server01
<td headers="AUTOSYS_JOB" class="t13dataalt">nbu.os.wn.135b.server01
<td headers="START_TIME" class="t13dataalt">01-Aug-2011 21:23
<td headers="END_TIME" class="t13dataalt">01-Aug-2011 21:51
<td headers="BACKUP_TYPE" class="t13dataalt">differential
<td headers="SCHEDULE" class="t13dataalt">daily
<td align="right" headers="SIZE_MB" class="t13dataalt"> 2,091.18
<td headers="IMAGES" class="t13dataalt">1
<td headers="EXIT_STATUS" class="t13dataalt">0
</tr><tr><td headers="HOST_NAME" class="t13data">server02
<td headers="AUTOSYS_JOB" class="t13data">nbu.os.wn.135b.server02
<td headers="START_TIME" class="t13data">31-Jul-2011 21:22
<td headers="END_TIME" class="t13data">31-Jul-2011 21:41
<td headers="BACKUP_TYPE" class="t13data">differential
<td headers="SCHEDULE" class="t13data">daily
<td align="right" headers="SIZE_MB" class="t13data"> 2,496.31
<td headers="IMAGES" class="t13data">1
<td headers="EXIT_STATUS" class="t13data">0
. 나는 다음을 시도했지만 내가 잘못된 트리 짖는 할 수있다 느낌 :
PS C:\Scripts> $Position.matches
Groups : {03-Aug-2011}
Success : True
Captures : {03-Aug-2011}
Index : 12056
Length : 11
Value : 03-Aug-2011
내 이론은 색인을 추가하여 문자열을했다 :
$Position = select-string -inputobject $SPL -pattern $datestr
$ Position.matches는 결과를 날짜까지 시간 값을 추출하는 길이로하지만 나는 그 방법을 모릅니다. 나는 또한 조금 원시적이라고 생각한다. 그 변수에 필요한 정보의 줄을 그 자리까지 세지 않고 나머지 줄을 빼내는 쉬운 방법이 있어야합니다.
페이지 하단에 섹션을 추가하는 방법을 잘 모르겠습니다. 여기에 추가 할 예정입니다.
이것은 현재 내 스크립트이며 오류없이 실행되지만 결과는 반환되지 않습니다.
# Get yesterdays date and convert it to the required search format
$Yesterday = [DateTime]::Now.AddDays(-1)
$datestr = $Yesterday.ToString("dd-MMM-yyyy")
# Scrape the webpage
$url = "http://fake-url"
$WebClient = New-Object System.Net.WebClient
$Results = $WebClient.DownloadString($url)
# Determine if the previous day is listed in the backups
$IsDateThere = $Results.Contains($datestr)
If ($IsDateThere){
# split the data into rows
[StringSplitOptions]$option = "None"
[string[]]$separator = "</td>"
$SPL = $Results.Split($separator, $option)
#strip the data into a hash table
$SPL |
Foreach-Object {
where {$_ -match 'headers="(.*)" class.*>(.*)'} |
ForEach-Object {
@{
$matches[1] = ($matches[2]).trim()
}
}
}
}
Else{
Write-Host "Yesterday's date not found"
}
아이디어가 있으십니까? 가장 최근 백업의 시작 시간과 종료 시간 및 종료 코드를 변수로 사용하려면 다음해야 할 일을 잘 모릅니다.
감사합니다. 나는 이것을 오늘 시험 할 것이고 내가 어떻게 일어나는지 알려줄 것이다. $ SPL 변수를 위의 문자열 대신 해시 테이블에 전달할 수 있습니까[email protected] Finke – jok5r
그래, 그뿐 아니라 잘 작동합니다 (내가 어떻게 작동하는지 믿을 수있는 방법을 보여주기 위해 바꿀 것입니다) – Matt
대답 아래의 원래 질문에 어떻게 확장합니까? – jok5r