TNT*_*TNT 4 printer powershell wmi
GUI 中的版本号看起来像 10.0.17134.1 和 3.0.8.0,但 -cmdlet 中的等效版本号(?)Get-PrinterDriver
看起来至少很神秘:
Get-PrinterDriver | Select-Object Name, MajorVersion, DriverVersion
Run Code Online (Sandbox Code Playgroud)
给我这样的输出:
Name MajorVersion DriverVersion
---- ------------ -------------
Microsoft XPS Docu... 4 2814750890000385
Samsung Universal ... 3 844424930656256
Run Code Online (Sandbox Code Playgroud)
那么我真的需要使用 WMI/CIM cmdlet 来获取真实的版本号吗?
这是因为Get-PrinterDriver
\'sDriverVersion
的类型为UInt64:
解决此问题的突破方法是使用以下内容(源代码)。我希望有一种更优雅的方式以我们期望的格式重新转换这些值,尽管我很欣赏这种方法的透明性,可以最好地理解正在发生的事情。
\n\nGet-PrinterDriver | Select-Object Name,@{\n n="DriverVersion";e={\n\n $ver = $_.DriverVersion\n $rev = $ver -band 0xffff\n $build = ($ver -shr 16) -band 0xffff\n $minor = ($ver -shr 32) -band 0xffff\n $major = ($ver -shr 48) -band 0xffff\n "$major.$minor.$build.$rev"\n\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n在我的机器上运行时的第一个结果是:
\n\nName DriverVersion \n---- ------------- \nSend to Microsoft OneNote 16 Driver 16.0.7629.4000\n
Run Code Online (Sandbox Code Playgroud)\n\n该转换通过使用按位运算来评估DriverVersion
16 位部分中的每个(64 位)来确定主要版本号、次要版本号、内部版本号和修订号。
例如,DriverVersion
我的机器上的第一个 64 位数字是4503600127348640
. 以下是变量定义期间发生的按位 AND ( ) ,以二进制形式显示:-band
$rev
\xe2\x80\xad00010000000000000000000000011101110011010000111110100000\xe2\x80\xac (4503600127348640)\n 1111111111111111 (65535, aka "0xffff")\n = 0000111110100000 (4000)\n (DriverVersion = X.Y.Z.4000)\n
Run Code Online (Sandbox Code Playgroud)\n\n这是$build
,它也使用-shr
(位右移):
\xe2\x80\xad00010000000000000000000000011101110011010000111110100000\xe2\x80\xac (4503600127348640)\n 1111111111111111 (65535)\n = 0001110111001101 (7629)\n (DriverVersion = X.Y.7629.4000)\n
Run Code Online (Sandbox Code Playgroud)\n\n这是$minor
:
\xe2\x80\xad00010000000000000000000000011101110011010000111110100000\xe2\x80\xac (4503600127348640)\n 1111111111111111 (65535)\n = 0000000000000000 (0)\n (DriverVersion = X.0.7629.4000)\n
Run Code Online (Sandbox Code Playgroud)\n\n最后,$major
:
00010000000000000000000000011101110011010000111110100000\xe2\x80\xac (4503600127348640)\n11111111 (65535)\n00010000 (16)\n (DriverVersion = 16.0.7629.4000)\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
10050 次 |
最近记录: |