Как подавить проверку переполнения в PowerShell?


1

PowerShell - это язык сценариев, а не язык программирования, он не поддерживает множество передовых методов, таких как перегрузка операторов (что было бы удобно в этом случае).

Чтобы добавить к тому, что вы уже предложили, вы можете просто поймать ошибку.

PS C:SomeFolder> [Helpers.Convert]::ToUInt32(-1);
4294967295

PS C:SomeFolder> [Helpers.Convert]::ToByte(-1);
255

PS C:SomeFolder> [Helpers.Convert]::ToByte(256);
0

Или напишите свою собственную функцию и сделайте некоторое удовольствие по модулю там.


1

Поведение, которое вы хотите в PowerShell, возможно, хотя это немного взломан; и, может быть, есть лучший способ.

Если вам просто нужна криптографическая функциональность, стоит обратить внимание на то, что есть TON, который уже встроен в BCL, и он полностью доступен из PowerShell (MD5, SHA, RSA, X509, тонны других вещей тоже).

Но если вы настроены на выполнение неконтролируемой арифметики в PowerShell, это хак, который должен дать вам то, что вы хотите (в основном мы внедряем код C # и используем ключевое слово unchecked):

[Helpers.Convert]::To...

Применение:

[System.Convert]::To...

Отметить:

  • Мы звоним, $membersа не Add-Type .
  • Если вам нужны другие методы, фактические методы C # необходимо будет вставить в Namespaceблок вверху кода.
  • Если вы запускаете Add-Typeнесколько раз подряд для одной Nameи той же Nameкомбинации, в том же сеансе PowerShell, это не сработает; и вы останетесь с ранее зарегистрированным типом. - Я добавил, -ErrorAction SilentlyContinueчтобы игнорировать этот конкретный сценарий. - Таким образом, вы можете сбросить этот код в сценарий .ps1 и вызвать его каждый раз, прежде чем использовать их методы, и они всегда будут присутствовать. - Но если вы изменяете код C # и проверяете, вы захотите изменить имя типа после каждого внесенного вами изменения; это болезненно.
PowerShell, целое число от переполнения, флажок не установлен, снят преобразования,

powershell,integer-overflow,unchecked,unchecked-conversion,

2

Ответов: 2


1

PowerShell - это язык сценариев, а не язык программирования, он не поддерживает множество передовых методов, таких как перегрузка операторов (что было бы удобно в этом случае).

Чтобы добавить к тому, что вы уже предложили, вы можете просто поймать ошибку.

PS C:SomeFolder> [Helpers.Convert]::ToUInt32(-1);
4294967295

PS C:SomeFolder> [Helpers.Convert]::ToByte(-1);
255

PS C:SomeFolder> [Helpers.Convert]::ToByte(256);
0

Или напишите свою собственную функцию и сделайте некоторое удовольствие по модулю там.


1

Поведение, которое вы хотите в PowerShell, возможно, хотя это немного взломан; и, может быть, есть лучший способ.

Если вам просто нужна криптографическая функциональность, стоит обратить внимание на то, что есть TON, который уже встроен в BCL, и он полностью доступен из PowerShell (MD5, SHA, RSA, X509, тонны других вещей тоже).

Но если вы настроены на выполнение неконтролируемой арифметики в PowerShell, это хак, который должен дать вам то, что вы хотите (в основном мы внедряем код C # и используем ключевое слово unchecked):

[Helpers.Convert]::To...

Применение:

[System.Convert]::To...

Отметить:

  • Мы звоним, $membersа не Add-Type .
  • Если вам нужны другие методы, фактические методы C # необходимо будет вставить в Namespaceблок вверху кода.
  • Если вы запускаете Add-Typeнесколько раз подряд для одной Nameи той же Nameкомбинации, в том же сеансе PowerShell, это не сработает; и вы останетесь с ранее зарегистрированным типом. - Я добавил, -ErrorAction SilentlyContinueчтобы игнорировать этот конкретный сценарий. - Таким образом, вы можете сбросить этот код в сценарий .ps1 и вызвать его каждый раз, прежде чем использовать их методы, и они всегда будут присутствовать. - Но если вы изменяете код C # и проверяете, вы захотите изменить имя типа после каждого внесенного вами изменения; это болезненно.
PowerShell, целое число от переполнения, флажок не установлен, снят преобразования,
Похожие вопросы