Truy vấn hàng loạt Thẻ dịch vụ Dell


9

Bất cứ ai cũng biết một cách để có được một loạt thông tin cho một danh sách các thẻ dịch vụ, Dell có một phần trên trang web của họ cho việc này không? Tôi cũng sẽ được mở cho bất kỳ thư viện Perl / Python hoặc tập lệnh shell * nix nào.

Ngay bây giờ tôi chủ yếu muốn một số loại ngày cho mỗi thẻ.


Chính xác thì, ý bạn là gì khi bạn yêu cầu "lấy một loạt thông tin" từ Dell?
eleven81

Ngày kết thúc bảo hành sẽ là thứ tôi muốn tìm. Ngày giao hàng cũng sẽ tốt đẹp.
Evan Anderson

Một tìm kiếm nhanh đã cho tôi rất nhiều người muốn truy vấn máy cho các thẻ dịch vụ, nhưng rất ít về những người truy vấn trang web Dell. Spiceworks liên kết thẻ dịch vụ với trang tải xuống trình điều khiển, lấy thẻ dịch vụ làm đối số URL. Lần lượt, điều hướng từ trang đó đến trang "Cấu hình hệ thống", sử dụng thẻ dịch vụ đó do Spiceworks cung cấp (mặc dù nó không còn trong URL tại thời điểm đó). Có vẻ như bạn sẽ không tìm thấy một URL mà bạn có thể vượt qua thẻ dịch vụ trong đó sẽ trả về một số HTML mà bạn có thể quét màn hình. Thật đáng tiếc, quá. Điều đó sẽ có ích.
Evan Anderson

Câu trả lời:


19

Tải xuống URL sau (thay thế SVCTAG ở cuối bằng thẻ dịch vụ thực tế) cho mỗi thẻ:

http://support.dell.com/support/topics/global.aspx/support/my_systems_info/details?c=us&l=en&s=gen&ServiceTag=SVCTAG

Phân tích trang kết quả cho thông tin bạn quan tâm được để lại dưới dạng bài tập cho người đọc :-)


2
định dạng trang gần đây đã thay đổi và bây giờ khó phân tích hơn. Dường như có một api có sẵn tại xserv.dell.com/service/assetservice.asmx?WSDL . Kịch bản nhanh để truy vấn nó: gist.github.com/1893036
Daniel

@Daniel dịch vụ web & kịch bản ví dụ này là giải pháp tốt nhất IMO, và có lẽ không được biết đến nhiều. Bạn nên đăng lại nó như một câu trả lời thích hợp, tôi sẽ +1 nó!
Patrick

3

Thêm hệ thống của bạn vào trang web hỗ trợ dell, trong phần " Hệ thống của tôi ". Bạn có thể xử lý tới 100 hệ thống.

Tất nhiên bạn phải có một tài khoản đến trang Dell.

Thật không may, tôi không biết về một hệ thống hàng loạt để thực hiện công việc, ngay cả khi bạn tất nhiên có thể sử dụng curl, snoopy hoặc bất cứ điều gì bạn quen thuộc để tự động đăng nhập, truy xuất danh sách và phân tích kết quả.


3

Tôi biết đây là một bài viết cũ, nhưng tôi đã dành một số giờ kha khá cho việc này và nghĩ rằng tôi sẽ giúp đỡ bất cứ ai khác gặp phải vấn đề này. Trang web mới của Dell là tất cả javascript và tôi không thể tìm ra cách mã hóa nó để truy vấn dữ liệu thẻ dịch vụ. Sau đó, đôi khi tôi nghĩ đến việc sử dụng trang web di động của họ (mobile = no javascript) và điều đó đã làm việc với tôi bằng cách sử dụng perl / LWP để kéo dữ liệu xuống trên mỗi thẻ dịch vụ. Tôi là một hacker perl, vì vậy người khác có thể viết nó sạch sẽ hơn một chút. Dưới đây kéo cấu hình hệ thống ban đầu. Ý tưởng là URL đầu tiên 'get' kéo cookie bằng thẻ dịch vụ và URL thứ hai lấy dữ liệu bạn muốn về thẻ dịch vụ. Sau đó, bạn có thể phân tích "$ answer" của lần nhận thứ hai cho dữ liệu bạn đang tìm kiếm.

#!/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";
}

2

Thẻ dịch vụ thường tương tự với số sê-ri.

Lớp WMI Win32_BaseBoard.SerialNumber chứa thông tin này. Google "số sê-ri wmi" và bạn sẽ tìm thấy một số giải pháp ví dụ để nhận dữ liệu này. Chúng tôi sử dụng tập lệnh tại thời điểm xây dựng để đặt tên cho hộp bằng cách sử dụng số sê-ri và các ký tự được đặt trước khác làm tên máy chủ của máy trạm, giúp xử lý sự cố dễ dàng hơn với số lượng lớn máy khách.


2
Tôi nghĩ Kyle đã có các thẻ dịch vụ. Anh ta muốn truy vấn trang web của Dell để lấy thông tin về các thẻ dịch vụ-- ngày kết thúc bảo hành, ngày giao hàng, v.v.
Evan Anderson

Duh, tôi là một thằng ngốc!
duffbeer703

2

Dell hiện có một tùy chọn để lưu các thẻ dịch vụ của bạn. Bạn cần tạo một đăng nhập với họ và đó là tất cả. Nó cũng cho thấy các máy chủ bảo hành sắp hết hạn và bạn có thể xuất từ ​​nó.


1
#!/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

1

Tôi biết đây là một chủ đề khá cũ (tôi chỉ tìm thấy nó vì nó được liên kết từ một chủ đề mới hơn), nhưng có lẽ bạn có thể sử dụng plugin nagios này: trao đổi nagios

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

Kịch bản truy vấn localhost tiêu chuẩn, thử dmidecode. Bạn cũng có thể chạy nó với máy chủ từ xa bằng SNMP hoặc bạn có thể chạy nó từ NRPE. Khá tiện dụng.


-1
dmidecode -s system-serial-number

sẽ trả lại thẻ dịch vụ

bạn có thể sử dụng ssh để chạy nó từ xa trên tất cả các hệ thống của mình trong một đợt. tất nhiên là tất cả họ đều chạy Linux


2
Tôi nghĩ bạn đang hiểu lầm. Kyle đã có các thẻ dịch vụ. Anh ta muốn truy vấn trang web của Dell để lấy thông tin về các thẻ dịch vụ.
Evan Anderson

Evan nói đúng về những gì tôi đang có sau ...
Kyle Brandt

oh, tôi đứng sửa rồi :)
dyasny

Tôi nhận được 'dmidecode' is not recognized as an internal or external command, operable program or batch file.trên máy tính xách tay dell của tôi.
starbeamrainbowlabs

sau đó bạn cần cài đặt dmidecode
dyasny 11/05/2015


-1

Lưu ý: Đây là chỉnh sửa repost của câu trả lời này

Dell đã thay đổi trang web của họ gần đây.

Tôi đã cập nhật tập lệnh Perl ở trên để cho phép thay đổi này.

Tôi chỉ quan tâm đến việc bỏ ngày giao hàng của mỗi máy vào một tệp văn bản nên chỉ phân tích cú pháp đó ra nhưng tôi chắc chắn mã có thể dễ dàng sửa đổi để lấy bất kỳ dữ liệu nào bạn muốn.

===

#!/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 $!;

2
Nên là một chỉnh sửa cho câu trả lời ban đầu.
Deer Hunter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.