【问题标题】:How do I call a Win32 Function in PowerShell 1.0 using P/Invoke?如何使用 P/Invoke 在 PowerShell 1.0 中调用 Win32 函数?
【发布时间】:2026-02-04 07:55:02
【问题描述】:

在许多情况下,从 PowerShell 脚本调用 Win32 函数或其他一些 DLL 会很有用。给定以下函数签名:

bool MyFunction( char* buffer, int* bufferSize )

我听说在 PowerShell CTP 2 中有一些东西可以让这更容易,但我很好奇这是如何在 PowerShell 1.0 中做得最好。需要调用的函数使用指针这一事实可能会影响解决方案(但我真的不知道)。

那么问题是编写可以调用上述导出的 Win32 函数的 PowerShell 脚本的最佳方法是什么?

记住 PowerShell 1.0。

【问题讨论】:

    标签: winapi powershell pinvoke


    【解决方案1】:

    要从 Powershell 调用非托管代码,请使用 Lee Holmes 创建的 Invoke-Win32 函数。您可以找到来源here。在那里你可以看到一个如何调用具有指针的函数的示例,但更简单的用法是:

    PS C:\> Invoke-Win32 "msvcrt.dll" ([Int32]) "puts" ([String])  "Test"
    Test
    0
    

    【讨论】:

      【解决方案2】:

      PowerShell 1.0 中没有任何机制可以直接调用 Win32 API。您当然可以编写一个 C# 或 VB.NET 辅助类来为您执行此操作并从 PowerShell 中调用它。

      更新:看看 -

      http://blogs.msdn.com/powershell/archive/2006/04/25/583236.aspx http://www.leeholmes.com/blog/ManagingINIFilesWithPowerShell.aspx

      【讨论】: