如何在 PowerShell 中抑制溢出检查?

2023-12-19

PowerShell 似乎在算术运算和转换后执行边界检查。例如,以下操作失败:

[byte]$a = 255
$a++

$a = [byte]256

有没有办法强制溢出或类型转换,而无需通过模数或 C# 和 Add-Type 进行手动计算?


您在 PowerShell 中想要的行为是可以实现的,不过,这有点麻烦;也许还有更好的方法。

如果您只是想要加密功能,那么值得一提的是,BCL 中已经内置了大量加密功能,并且可以从 PowerShell 完全访问它(MD5、SHA、RSA、X509,还有大量其他内容)。

但是,如果您执意要在 PowerShell 中执行未经检查的算术,那么这个 hack 应该可以满足您的需求(基本上我们正在嵌入 C# 代码,并使用未经检查的关键字):

$members = @' 
public static UInt32 ToUInt32(int value)
{
    unchecked
    {
        return (UInt32)value;
    }
}


public static byte ToByte(int value)
{
    unchecked
    {
        return (byte)value;
    }
}
'@;

$type = Add-Type -Name "Convert" -Namespace "Helpers" `
        -MemberDefinition $members -PassThru -ErrorAction SilentlyContinue;

Usage:

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

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

PS C:\Some\Folder> [Helpers.Convert]::ToByte(256);
0

Of Note:

  • 我们正在打电话[Helpers.Convert]::To... and not [System.Convert]::To....
  • 如果您需要其他方法,则需要将实际的 C# 方法插入到$members代码顶部的块。
  • 如果你跑Add-Type同一件事连续多次Namespace and Name组合,在同一个PowerShell会话中,会失败;您将保留之前注册的类型。 - 我已经添加-ErrorAction SilentlyContinue忽略这个特定场景。 -- 这样,您可以将此代码转储到 .ps1 脚本中,并在每次使用它们的方法之前调用它,并且它们将始终存在。 -- 但是如果您正在修改 C# 代码并重新测试,您将需要在每次更改后更改类型名称;有点痛苦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PowerShell 中抑制溢出检查? 的相关文章

  • PowerShell v4 中的本机内存泄漏?

    我安装的 PS v4 似乎存在泄漏 CLR版本 4 0 30319 34209构建版本 6 3 9600 17400 我运行以下命令 内存快速无限增长 while true New Object System Object 如果我跳出循环并
  • 在 Powershell 中使用用户名/密码连接到网络文件夹

    我经常在 Powershell 中访问共享网络文件夹以获取文件等 但如果共享需要用户名 密码 Powershell 不会提示我输入这些信息 这与 Windows 资源管理器不同 如果我首先在 Windows 资源管理器中连接到该文件夹 Po
  • “(”字符在 PowerShell 中不起作用

    我无法让它发挥作用 它不喜欢 字符 我如何解决它 Dir Rename Item NewName name replace 如何在 PowerShell 中处理这种类型的特殊字符 vonPryze 对问题的确切原因做了很好的解释 但还有一个
  • 如何通过 PowerShell 获取注册表项的所有权?

    我尝试通过 PowerShell 获取注册表项的所有权 但它悄无声息地失败了 我正在使用以下代码 get the username of the current user uname System Security Principal Wi
  • 获取我的 databricks 工作区中所有笔记本的列表

    如何获取工作区中所有笔记本的列表并将其名称以及完整路径存储在 csv 文件中 我已尝试使用 Databricks CLI 选项 但似乎没有递归操作 databricks 工作区列表 https docs databricks com dev
  • VBS 与 PowerShell:哪个更轻?

    如果我需要一个可以在系统中以最少的努力执行的脚本 我会选择哪个 通过查看任务管理器中的进程 内存 私有工作集 wscript exe 2 068Kpowershell exe 33 144K Thanks 这里存在工作守恒定律 如果机器做的
  • 使用 New-WebServiceProxy 在 PowerShell 中添加自定义 SOAP 标头

    在 C 中我可以执行以下操作 var header MessageHeader CreateHeader MyHeader http mynamespace Header value OperationContext Current Out
  • 如何在 PowerShell 中批量重命名文件?

    我正在尝试执行以下操作 Rename Item c misc xml tmp 我基本上想将目录中每个文件的扩展名更改为 tmp代替 xml 我似乎无法在 PowerShell 中找到直接的方法来执行此操作 来自帮助文档中的示例4Rename
  • 域用户的AD密码有效期

    我正在使用以下命令从其他域获取用户信息 并且我成功获取了该数据 如何添加过滤器以获取以下查询中用户的密码到期日期 获取 ADuser 用户名 服务器 abc com 这不是超级简单 你必须计算它 Get ADUser username se
  • 如何使用 PowerShell 检查文件是否早于特定时间?

    我怎样才能办理登机手续电源外壳查看 fullPath 中的文件是否早于 5 天 10 小时 5 分钟 老 我的意思是如果创建或修改不晚于 5 天 10 小时 5 分钟 这是一种非常简洁但易读的方法 lastWrite get item fu
  • 在 PowerShell 中返回具有单个元素的数组

    这应该非常简单 我需要从函数返回哈希表数组 当有多个哈希表时 这是有效的 但当只有一个哈希表时 结果不是数组 我不想测试结果是否是数组 function GetArrayWith1Hashtable array hashtable hash
  • Powershell get-item VersionInfo.ProductVersion 不正确/与 WMI 不同

    我试图理解为什么 Powershell 会返回 DLL 文件的版本号 而不是 Windows 资源管理器中的文件属性页和 WMI 查询显示的版本号 如果这不符合编码问题的正确条件 我提前表示歉意 场景 运行以下 powershell 命令
  • Windows / Powershell 将程序版本获取到变量中

    我很接近 但不在那儿 我可以通过 powershell 获取应用程序的版本 但它附带一堆文本 这个命令 powershell NoLogo NoProfile Command get item Path c myapp exe Versio
  • 在 PowerShell 中提示用户输入

    我想提示用户进行一系列输入 包括密码和文件名 我有一个使用的例子host ui prompt 这似乎很合理 但我无法理解回报 有没有更好的方法在 PowerShell 中获取用户输入 Read Host http technet micro
  • 如何使用 7zip powershell 包含文件和文件夹

    我试图让我的 powershell 脚本压缩一些文件和文件夹 目前 我可以使我的脚本要么压缩所有文件 不包含文件夹 要么压缩包含文件夹但到错误路径的所有文件 一个例子是 如果我有一个名为 wordpress 的文件夹 其中包含文件和一些子文
  • 循环字符串重命名

    我正在运行一个截取屏幕截图并保存到文件的脚本 我是新手 在集成鼠标事件时遇到困难 所以现在我将手动完成部分任务 File C Users mydirectory image1 bmp Add Type AssemblyName System
  • 从 Python 执行 PowerShell 脚本的最佳方式是什么

    之前关于该主题的所有帖子都涉及其用例的具体挑战 我认为 如果有一篇文章只讨论从 Python 运行 PowerShell 脚本的最简洁方法 并询问是否有人有比我发现的更好的解决方案 那将会很有用 绕过 PowerShell 尝试以与预期不同
  • Powershell命令Publish-AzWebApp未发布应用程序

    我有一个 Net 6 Web API 应用程序 我可以通过 Visual Studio 2022 将其发布到 Azure 应用程序服务 然后使用该应用程序 现在我想自动化它 我的 powershell 创建了一个 zip 文件 其中包含所有
  • 为什么参数名称不能以数字开头?

    变量名可以是数字字母 为什么参数名不能也这样 因为first parameter char of the command parameter中指定的语法Powershell语言规范 http www microsoft com en us
  • 我怎么知道PowerShell函数参数被省略了

    考虑这样的函数 function Test foo bar 我们可以称之为 Test foo null Test 我如何知道何时省略了 foo 以及何时为 null 如果您使用的是 Powershell V2 或更高版本 则可以使用 PSB

随机推荐

  • iPhone OS 4.0.x - 从后台过渡到前台

    iPhone编程问题 是否可以通过编程方式将 iPhone 应用程序从后台模式唤醒 恢复到前台模式 我有一个长时间运行的后台任务 该任务正在 UIApplicationDelegate 的 applicationDidEnterBackgr
  • 如何在 Apache Bench 中发送多个查询字符串?

    ab n 1 c 1 我得到了第一个查询字符串的答案 但我也得到了 superDo 不被识别为内部或外部命令 可运行的程序或批处理文件 请帮我 TIA 问候 蒂鲁 您可能只需要引用 URL 即可避免 shell 特殊字符被解释 在这种情况下
  • 在 Python 中遍历列表列表中的列

    当我尝试跨行中的列进行迭代时 该列在嵌套循环内不会发生变化 i rows 4 i cols 3 matrix 0 for c in xrange i cols for r in xrange i rows for row r in enum
  • Android 从 Google 云端硬盘串流视频

    我正在构建一个 Android 应用程序 需要从 Google 驱动器流式传输视频 视频链接如下 https docs google com file d ID 我无法获取 rtsp 因此它无法在 videoview 中运行视频 并且它不会
  • Angularjs Post 不向 Spring JWT 发送标头

    我有一个由 AngularJs 构建的网络应用程序和一个由 Spring 构建的后端应用程序 我正在使用 JWT 来保护我的应用程序 使用 Get 方法一切正常 在后端级别我得到了我期望的不记名令牌 这样我就可以返回私人信息 但使用 POS
  • PHP 相当于 Ruby 的或等于 (foo ||=bar)?

    在 PHP 中我经常写这样的行 isset foo NULL foo bar 在 ruby 中 有一个绝妙的捷径 称为或等于 https stackoverflow com questions 995593 what does or equ
  • 为什么 dapper 在执行选择时返回 Guid 全零,但表中的 guid 值设置正确?

    我正在使用 dapper 从表中查询数据 然后将其转换为对象 当它被转换为对象时 guid 属性设置为全零 但所有其他属性都设置正确 public class UserStuff public int Id get set public G
  • 我应该将所有方法参数标记为最终参数并指定类型吗

    有效的 dart 指定顶级变量应该是final当适用 https dart lang github io linter lints prefer final fields html https dart lang github io lin
  • Npm 错误:npm 安装命令的 503 服务不可用

    我正在尝试运行 npm install 命令 但出现此错误 Error 503 Service Unavailable for npm install command 任何人都可以请我请求您解决此问题 这是获取错误日志文件时实际发生的完整错
  • 在 IE9-11 中使用 jQuery 更新 SVG 文本

    我正在尝试使用 jQuery 更新 SVG 路径上的文本 它在 Firefox 和 Chrome 中工作正常 但在 IE9 和 IE11 尚未在 10 上测试 但可能是相同的 中文本未更新 有什么想法 解决方法吗 到目前为止 这是我的代码
  • C:同时运行两个函数?

    我在 C 中有两个函数 void function1 do something void function2 do something while doing that 我如何同时运行这两个函数 如果可以的话请举个例子 你会使用线程 例如
  • 如果满足 AWK 中的条件,则打印行范围

    我想做的是使用 awk 在没有管道的情况下显示满足特定条件的行上方 2 行和下方 2 行 例如 我正在搜索字符串 s62234 找到后 我想打印蓝色矩形内的所有行 如所附屏幕截图所示 这是我正在使用的文件 thefmifile txt s6
  • Dart/Flutter:Http 请求引发 XMLHttpRequest 错误 [重复]

    这个问题在这里已经有答案了 我正在尝试制作一个带有 flutter 的 RSS 阅读器 但是该程序提出了XMLHttpRequest error 在我的测试中 我使用网络 Chrome 作为我的目标平台 感谢您的帮助 Future
  • PHP 中的 FPDF 中的特殊字符

    我有一个用户可以填写的网络表单 该内容使用 FPDF 和 PHP 填充 PDF 当用户输入带有撇号的单词时 PDF 中该单词前面会出现斜杠 同样 商标符号等特殊字符的编码也是错误的 FPDF 常见问题解答说要使用 str utf8 deco
  • Kohana 3.3 ORM _has_many _belongs_to

    我正在尝试使用内置的 ORM 在 Kohana 3 3 中设置产品对象 我想要这样 当我打电话时 p1 ORM factory product gt where product type 1 gt find all 它将创建一个具有以下结构
  • 数组的具体化内联函数

    在 Kotlin 中是否可以编写一个具体化类型的内联函数 它可以返回不同类型的Arrays 我想这样的事情 inline fun
  • 适用于 Android 的“频移键控”解码器

    我正在尝试通过 Android 设备的音频端口传输一些数据 我使用 FSK 频移键控 我使用两个不同的频率来表示 1 和 0 是否有任何 Android 库或示例代码来 FSK 解码捕获的音频数据 你可能想看看这个 https code g
  • 在 Laravel 中允许多个密码重置令牌

    Laravel 5 7 密码重置系统的默认行为是在password resets删除该用户的任何其他表后 这种行为是由 Illuminate Auth Passwords DatabaseTokenRepository而且它似乎不可配置 p
  • 是否有 String.format(...) 的类型安全替代方案

    对于撰写错误 日志记录或任 何其他String消息String format 可以使用方法 不幸的是 这个方法不是类型安全的 因此以下源代码将抛出一个IllegalFormatException String s String format
  • 如何在 PowerShell 中抑制溢出检查?

    PowerShell 似乎在算术运算和转换后执行边界检查 例如 以下操作失败 byte a 255 a a byte 256 有没有办法强制溢出或类型转换 而无需通过模数或 C 和 Add Type 进行手动计算 您在 PowerShell