サービスタグのリストに関する一連の情報を取得する方法を知っている人はいますが、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
興味のある情報の結果ページを解析することは、読者のための演習として残します:-)
私はこれが古い記事であることを知っていますが、私はこれにかなりの時間を費やし、これに遭遇した他の誰かを助けたいと思いました。デルの新しいサイトはすべてjavascriptであり、サービスタグデータを照会するためにそれをコード化する方法を理解できませんでした。しばらくしてから、代わりにモバイルサイト(mobile = javascriptなし)を使用することを考えましたが、perl / LWPを使用して各サービスタグのデータを取得するのに役立ちました。私はperlハッカーなので、他の誰かがこれをもう少しきれいに書けるかもしれません。以下は元のシステム設定を引き出します。最初のURL 'get'はサービスタグ付きのCookieをプルし、2番目のURL getはサービスタグについて必要なデータをプルするという考え方です。次に、探しているデータの2番目の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
スクリプトは標準のlocalhostにクエリを送信し、dmidecodeを試行します。SNMPを使用してリモートホストに対して実行することも、NRPEから実行することもできます。かなり便利です。
dmidecode -s system-serial-number
サービスタグを返します
sshを使用して、すべてのシステムでリモートでバッチで実行できます。もちろん、全員がLinuxを実行していると仮定します
'dmidecode' is not recognized as an internal or external command, operable program or batch file.
デルのラップトップに乗ります。
デルのサポートWebサイトをポーリングして、サービスタグのリストからcsvファイルを作成するauto-itスクリプトがあります。
同じロジックに従って他の情報を抽出し、それらをcsv形式に入れることができます
http://fei-automation.blogspot.hk/2014/09/how-to-check-model-for-list-of-dell-pc.html
注:これはこの回答の編集された再投稿です
デルは最近ウェブサイトを変更しました。
この変更を可能にするために、上記の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 $!;