Это потому, что Get-PrinterDriver DriverVersion имеет тип UInt64:

Прорывным способом исправить это является использование ниже (источник). Я надеюсь, что есть более элегантный способ переопределения этих значений в ожидаемом нами формате, хотя я ценю, насколько прозрачен этот метод, чтобы лучше понять, что происходит.
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
Преобразование выполняется с использованием побитовой операции для оценки каждого DriverVersion (64- битного ) в разделах по 16 битов для определения старшего , младшего номера, номера сборки и редакции.
Например, первое DriverVersion на моей машине, как 64- битное число, это 4503600127348640 . Вот побитовое И (-band), происходящее во время определения переменной $rev , показанной в двоичном виде:
00010000000000000000000000011101110011010000111110100000 (4503600127348640)
1111111111111111 (65535, aka "0xffff")
= 0000111110100000 (4000)
(DriverVersion = X.Y.Z.4000)
Вот $build , которая также использует -shr (bit shift-right):
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)