社内の最新のPC情報を常に収集するため、PCViewというPC情報を収集してくれるツールを使っています。
以前、ドメインに参加できないエディションのWindowsにログオンスクリプトのようなものを実装する方法を記事にした際に、PCViewでの収集方法をメモメモしました。
しかし、Windows7まではこれで問題なかったのですが、Windows8以降になると、収集したPC情報のOSが「Unknown」になってしまい、そのPCがWindows8系なのか、Windows10なのかが判断できず困っていました。
そこで、決め打ち的な方法ですが、大ざっぱにWindows8系かWindows10かを判別する方法がわかりましたので、メモメモします。
PCViewではBuild番号で判別できない
最初は、OSのビルド番号を頼りにOSを判別しようと思いましたが、PCViewが取得できる最大ビルド番号は9200まででした。つまり、Windows8だろうとWindows10だろうと、取得される値は「Unknown (Build 9200)」なのです。
実際に、社内にあるWindows8以上のPCで確認したところ、全てのPCで取得された値が「Unknown (Build 9200)」でした。
なので、ビルド番号を当てにすることはできません。
ProductIDで判断する
そこで、Windows8系、Windows10系それぞれで共通する項目がないか調べてみたところ、プロダクトIDに共通性が見られます。
あくまで社内のPCでの確認になりますが、Windows8.1のプロダクトIDは、全て00258から始まっていました。
一方、Windows10のプロダクトIDは、初めからWindows10をインストールしたPCは全て00325、Windows7や8系からアップグレードしたPCは全て00326から始まっていました。
この結果を踏まえると、プロダクトIDの先頭5桁を数値化し、325以上はWindows10、それ以下で256以上をWindows8.1と判別できそうです。
判別処理を改修
現在、PCViewで収集したCSVファイルを1ヶ所に集め、PHPで社内PC一覧を生成する処理をつくり、ブラウザで表示できるようにしています。
その中で、OSを判別する処理に以下の処理を追加しました。やっていることは非常に単純です。
if( $line[1] === "Soft" && $line[2] === "Windows" && $line[3] === "ProductID" ){
if( strpos( $result_os, "Unknown" ) !== false ){
if( intval( substr( $line[4], 0, 5 ) ) >= 325 ){
$result_os = str_replace( "Unknown", "Windows 10" , $result_os );
} elseif( intval( substr( $line[4], 0, 5 ) ) >= 258 ){
$result_os = str_replace( "Unknown", "Windows 8.1", $result_os );
}
continue;
}
}
CSVファイルを1行ずつ読み込んで、explode関数で配列に変換して変数$lineに代入し、決め打ちで項目名を取得して、OS名を変数$result_osにセットしています。
Windows8以降のOS名には「Unknown」が入ってきますので、プロダクトIDで判別したOS名に置き換える、という処理です。
とりあえず、プロダクトIDの頭5桁が00258以下の数字のパターンがなかったので、00258以上を書き換え対象としています。
さいごに
とりあえず、暫定的ではありますが、これでWindows8以降のOSが表示できるようになりました。
サポートの関係もあり、年内には社内全てのPCをWindows10にしてしまう予定なので、この対応もすぐに無意味になってしまいそうですが、一応、こんな処理をすればOS判別できますよ、ということで。
コメント