GUI のバージョン番号は 10.0.17134.1 や 3.0.8.0 のように見えますが、Get-PrinterDriver
-cmdlet からの同等のもの (?) は少なくとも不可解に見えます。
Get-PrinterDriver | Select-Object Name, MajorVersion, DriverVersion
次のような出力が得られます:
Name MajorVersion DriverVersion
---- ------------ -------------
Microsoft XPS Docu... 4 2814750890000385
Samsung Universal ... 3 844424930656256
それで、WMI/CIMコマンドレットを使って取得する必要があるのでしょうか?本物バージョン番号は?
答え1
これはGet-PrinterDriver
のDriverVersion
型が64進数:
これを修正する画期的な方法は、以下を使用することです(ソース)。何が起こっているかを最もよく理解するには、この方法の透明性が重要だとは思いますが、これらの値を期待する形式で再キャストするよりエレガントな方法があることを願っています。
Get-PrinterDriver | Select-Object Name,@{
n="DriverVersion";e={
$ver = $_.DriverVersion
$rev = $ver -band 0xffff
$build = ($ver -shr 16) -band 0xffff
$minor = ($ver -shr 32) -band 0xffff
$major = ($ver -shr 48) -band 0xffff
"$major.$minor.$build.$rev"
}
}
私のマシンでこれを実行したときの最初の結果は次のとおりです。
Name DriverVersion
---- -------------
Send to Microsoft OneNote 16 Driver 16.0.7629.4000
変換は以下を使用して行われますビット演算それぞれ (64 ビット) を 16 ビットのセクションで評価し、DriverVersion
メジャー、マイナー、ビルド、およびリビジョン番号を決定します。
たとえば、DriverVersion
私のマシンの最初の64ビットの数値は です4503600127348640
。ビットAND-band
変数の定義中に発生する( ) を$rev
バイナリで表示します。
00010000000000000000000000011101110011010000111110100000 (4503600127348640)
1111111111111111 (65535, aka "0xffff")
= 0000111110100000 (4000)
(DriverVersion = X.Y.Z.4000)
ここで は であり$build
、これも-shr
(ビット右シフト):
00010000000000000000000000011101110011010000111110100000 (4503600127348640)
1111111111111111 (65535)
= 0001110111001101 (7629)
(DriverVersion = X.Y.7629.4000)
ここは$minor
:
00010000000000000000000000011101110011010000111110100000 (4503600127348640)
1111111111111111 (65535)
= 0000000000000000 (0)
(DriverVersion = X.0.7629.4000)
ついに、$major
:
00010000000000000000000000011101110011010000111110100000 (4503600127348640)
11111111 (65535)
00010000 (16)
(DriverVersion = 16.0.7629.4000)
答え2
何がエレガントで、何が表現力豊かで、何が簡潔で、何が謎めいているかについては、議論の余地がたくさんあります。もちろん、より簡潔なバージョン (必ずしも優れているわけではありませんが) は次のようになります。
Get-PrinterDriver | Select-Object Name, @{
n = "DriverVersion"
e = {
$ver = $_.DriverVersion
(3..0 | ForEach-Object { ($ver -shr ($_ * 16)) -band 0xffff }) -join '.'
}
}
ローマへのもう一つの道。