누구나 서비스 태그 목록에 대한 많은 정보를 얻을 수있는 방법을 알고 있다면 Dell 사이트에 해당 섹션이 있습니까? 또한 모든 Perl / Python 라이브러리 또는 * nix 쉘 스크립트를 사용할 수 있습니다.
지금은 주로 각 태그에 대해 일종의 날짜를 원합니다.
누구나 서비스 태그 목록에 대한 많은 정보를 얻을 수있는 방법을 알고 있다면 Dell 사이트에 해당 섹션이 있습니까? 또한 모든 Perl / Python 라이브러리 또는 * nix 쉘 스크립트를 사용할 수 있습니다.
지금은 주로 각 태그에 대해 일종의 날짜를 원합니다.
답변:
각 태그에 대해 다음 URL (실제 서비스 태그와 함께 SVCTAG를 대체)을 다운로드하십시오.
http://support.dell.com/support/topics/global.aspx/support/my_systems_info/details?c=us&l=en&s=gen&ServiceTag=SVCTAG
관심있는 정보에 대한 결과 페이지를 파싱하는 것은 독자의 연습으로 남아 있습니다 :-)
나는 이것이 오래된 게시물이라는 것을 알고 있지만, 이것에 대해 상당한 시간을 보냈고 이것에 부딪친 다른 사람을 도울 것이라고 생각했습니다. Dell의 새로운 사이트는 모두 자바 스크립트이며 서비스 태그 데이터를 쿼리하기 위해 코드를 작성하는 방법을 알 수 없었습니다. 언젠가 나는 대신 모바일 사이트 (mobile = no javascript)를 사용하려고 생각했고 perl / LWP를 사용하여 각 서비스 태그에서 데이터를 가져 왔습니다. 저는 펄 해커이므로 다른 사람이 좀 더 깔끔하게 작성할 수 있습니다. 아래는 원래 시스템 구성을 가져옵니다. 첫 번째 URL 'get'은 서비스 태그가있는 쿠키를 가져오고 두 번째 URL get은 서비스 태그에 대해 원하는 데이터를 가져옵니다. 그런 다음 원하는 데이터에 대한 두 번째 가져 오기의 "$ answer"를 구문 분석 할 수 있습니다.
#!/usr/bin/perl
use strict;
use LWP::Simple;
use LWP::UserAgent;
my $inputfile = $ARGV[0];
my ($url,$response,$answer);
open (DATA, $inputfile) or die "Can't open $inputfile \n";
foreach my $serviceTag (<DATA>)
{
chomp $serviceTag;
print "\n$serviceTag";
##### Allow Cookies
my $browser = LWP::UserAgent->new;
$browser->cookie_jar({});
$browser->cookie_jar( HTTP::Cookies->new(
'file' => 'cookies.lwp', # where to read/write cookies
'autosave' => 0 # do not save it to disk when done
));
# declare agent as mozilla, not perl LWP
$browser->agent("Mozilla/8.0");
my $urlPartA = "http://m.dell.com/mt/www.dell.com/support/troubleshooting/us/en/19/Servicetag/";
my $urlPartB = "?s=BIZ&un_jtt_redirect";
my $firstURL = join('', $urlPartA,$serviceTag,$urlPartB);
#print "\nURL = $firstURL";
$url = URI->new("$firstURL");
$response = $browser->get( $url );
$answer = $response->content;
#print "\nAnswer:\n$answer\n\n";
$url = URI->new('http://m.dell.com/mt/www.dell.com/support/troubleshooting/us/en/555/TroubleShooting?name=TroubleShooting_SystemConfigurationTab');
$response = $browser->get( $url );
$answer = $response->content;
#print "\nAnswer:\n$answer\n\n";
}
서비스 태그는 일반적으로 일련 번호와 유사합니다.
WMI Win32_BaseBoard.SerialNumber 클래스에는이 정보가 포함되어 있습니다. Google "wmi 일련 번호"에는이 데이터를 가져 오는 몇 가지 예제 솔루션이 있습니다. 빌드시 스크립트를 사용하여 일련 번호 및 기타 앞에 붙은 문자를 워크 스테이션 호스트 이름으로 사용하여 상자 이름을 지정하므로 많은 수의 클라이언트에서 문제를 훨씬 쉽게 해결할 수 있습니다.
#!/usr/bin/python
# dell_warranty.py v0.1
# Written by Frode Egeland <egeland[at]gmail.com> - Copyright 2009
# Released under the terms of the GNU GPL v3 - see http://www.gnu.org/licenses/gpl-3.0.html
#
# Version History
# 0.1 - 2009-10-12 - Frode Egeland - Initial version. Tested with a simple csv list of service tags only.
#
import urllib2, csv, re
from BeautifulSoup import BeautifulSoup
url="http://support.dell.com/support/topics/global.aspx/support/my_systems_info/details?c=us&l=en&s=gen&ServiceTag=%s"
stlist = []
# generate a list of servicetags from a csv
csvfile = csv.reader(open('taglist.csv'))
for line in csvfile:
for entry in line:
stlist.append(entry)
fixdate = re.compile("(\d{1,2})\/(\d{1,2})\/(\d{4})")
print "Service Tag, Warranty Type, Provider, Start Date, End Date, Days Remaining"
for currtag in stlist:
page = urllib2.urlopen(url % (currtag,))
for line in page.readlines():
if "Parts only Warranty" in line:
soup = BeautifulSoup(line)
break
table = soup.find('table',{'class':"contract_table"})
rows = table.findAll('tr')
rows = rows[1:]
for row in rows:
output = "%s" % (currtag,)
cells = row.findAll('td')
for cell in cells:
if cell.a: # link / formatted text
txt = cell.a.string
elif cell.b: # bold text
txt = cell.b.string
elif cell.i: # italic
txt = cell.i.string
else: #normal text
txt = cell.string
match = fixdate.search(txt)
if match:
txt = "%d-%d-%d" % (int(match.group(3)),int(match.group(1)),int(match.group(2)))
output = "%s,%s" % (output,txt)
output = output.strip()
print output
나는 이것이 꽤 오래된 스레드라는 것을 알고 있습니다 (새로운 스레드에서 연결 되었기 때문에 그것을 찾았습니다).하지만 아마도이 nagios 플러그인을 사용할 수 있습니다 : nagios exchange
python check_dell_warranty.py
OK: Service Tag: tag Warranty: Next Business Day, Provider: DELL, Start: 2010-02-24, End: 2013-02-25, Days left: 860 Warranty: NBD ProSupport For IT On-Site, Provider: DELL, Start: 2010-02-24, End: 2013-02-25, Days left: 860
이 스크립트는 표준 로컬 호스트를 쿼리하여 dmidecode를 시도합니다. SNMP를 사용하여 원격 호스트에 대해 실행하거나 NRPE에서 실행할 수도 있습니다. 아주 편리합니다.
dmidecode -s system-serial-number
서비스 태그를 반환합니다
ssh를 사용하여 모든 시스템에서 원격으로 배치를 실행할 수 있습니다. 그들이 모두 리눅스를 실행하고 있다고 가정
'dmidecode' is not recognized as an internal or external command, operable program or batch file.
내 델 노트북에.
Dell 지원 웹 사이트를 폴링하여 서비스 태그 목록에서 csv 파일을 생성 하는 auto-it 스크립트가 있습니다.
동일한 논리에 따라 다른 정보를 추출하여 CSV 형식으로 넣을 수 있습니다.
http://fei-automation.blogspot.hk/2014/09/how-to-check-model-for-list-of-dell-pc.html
참고 : 이 답변의 다시 게시 편집
Dell은 최근 웹 사이트를 변경했습니다.
이 변경을 허용하기 위해 위의 Perl 스크립트를 업데이트했습니다.
각 컴퓨터의 배송 날짜를 텍스트 파일로 덤프하는 것에 만 관심이 있었기 때문에 구문 분석 만했지만 원하는 데이터를 가져 오기 위해 코드를 쉽게 수정할 수 있다고 확신합니다.
===
#!/usr/bin/perl
use strict;
use LWP::Simple;
use LWP::UserAgent;
use Mojo::DOM;
my $inputfile = $ARGV[0];
my ($url,$response,$html);
my $outputfile = "result.txt";
open (DATA, $inputfile) or die "Can't open $inputfile \n";
open OUTPUT, ">>".$outputfile or die "Could not open '$outputfile'\n";
foreach my $serviceTag (<DATA>)
{
chomp $serviceTag;
print "\n$serviceTag\n";
print OUTPUT $serviceTag."\t";
##### Allow Cookies
my $browser = LWP::UserAgent->new;
$browser->cookie_jar({});
$browser->cookie_jar( HTTP::Cookies->new(
'file' => 'cookies.lwp', # where to read/write cookies
'autosave' => 0 # do not save it to disk when done
));
# declare agent as mozilla, not perl LWP
$browser->agent("Mozilla/8.0");
#
my $urlPartA = "http://www.dell.com/support/home/us/en/19/product-support/servicetag/";
# configuration
my $urlPartB = "/configuration";
my $firstURL = join('', $urlPartA,$serviceTag,$urlPartB);
#print "\nURL = $firstURL";
$url = URI->new("$firstURL");
$response = $browser->get( $url );
$html = $response->content;
#print "\nAnswer:\n$html\n\n";
my @values;
my $dom = Mojo::DOM->new;
$dom->parse($html);
my $skip;
for my $dd ($dom->find('div.col-lg-4.col-md-4.col-sm-3.col-xs-6')->each) {
push(@values, $dd->text) if $skip++;
#print $dd->text, "\n" if $skip++;
}
print $values[1]."\n";
if ( $values[1] =~ m/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/ )
{ # format date better for Excel
#print OUTPUT $values[1]."\n";
print OUTPUT "$3-$1-$2\n";
}
print $values[1]."\n";
print "$3-$1-$2\n";
}
close OUTPUT or die $!;