Какие объекты подходят для добавлять-участника?

Мой предпочтительный способ:

$x_num = oct("0b" . $x_bin);

Цитата из man perlfunc:

    oct EXPR
    oct     Interprets EXPR as an octal string and returns the
            corresponding value. (If EXPR happens to start
            off with "0x", interprets it as a hex string. If
            EXPR starts off with "0b", it is interpreted as a
            binary string. Leading whitespace is ignored in
            all three cases.)
6
задан Josh 29 May 2009 в 03:49
поделиться

1 ответ

PowerShell имеет так называемый PSObject, который является оболочкой для любого объекта .NET (или это может быть полностью настраиваемый объект), и когда вы вызываете Add-Member, PowerShell неявно обертывает реальный объект. NET с PSObject.

Способ работы Add-Member зависит от того, начали вы с PSObject или нет. Если вы не начали с PSObject, Add-Member заключит входные данные в PSObject, и вам нужно будет повторно назначить переменную, чтобы увидеть адаптированный объект.

Так, например:

$x = [Environment]::OSVersion
$x | Add-Member NoteProperty IsVista $true
$x | Format-List   # does not show the new property

Это поскольку OSVersion не упакован, это объект PSObject. Add-Member оборачивает его, но эта оболочка теряется, потому что вы не переназначаете $ x обернутому объекту. Противопоставьте этому поведению:

$x = New-Object OperatingSystem ('Win32NT', '6.0')
$x | Add-Member NoteProperty IsVista $true
$x | Format-List   # DOES show the new property

Это связано с тем, что New-Object неявно обертывает новый экземпляр в PSObject.

17
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: