40

我正在学习一些 PowerShell。是否可以查看像Get-ChildItem这样的内置 cmdlet 的源代码?

4

10 回答 10

27

Powershell 的源代码现已在 Github 上提供。可以在这里
找到 源代码。Get-ChildItem

于 2016-08-20T20:11:56.330 回答
22

实际上,最好的办法是去看看PowerShell Community Extensions。这个开源软件社区项目“旨在提供一组广泛有用的附加 cmdlet……”。该项目的开发人员是 PowerShell MVP 并且知道他们的东西。

至于在现有 PowerShell cmdlet 上使用反射,PowerShell MVP Oisin Grehan 制作了一个名为“ Reflect-Cmdlet ”的方便函数。我不会窃取他的代码并将其放在这里,但基本上你要做的是:

Get-Command Get-ChildItem | Reflect-Cmdlet

然后.NET Reflector弹出并打开并展开正确的程序集以及所有内容。这真的很酷。

于 2008-11-06T04:00:13.340 回答
12

我想如果你刚开始使用 PowerShell,这就是你要找的:

$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-Process)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\powershell\get-process.ps1

这将创建一个脚本,显示Get-Process如何运行。放入任何要替换 Get-Process 的 cmdlet。如果您想在 Google 上搜索更多信息,这就是您创建代理功能的方式。

于 2013-12-10T01:45:40.903 回答
12

对于已编译的 Cmdlet,您可以获得以下路径.dll

(Get-Command Get-ChildItem).DLL

(替换Get-ChildItem为您感兴趣的 cmdlet)

一旦知道 .NET 的路径.dll,就可以使用 .NET 反汇编程序(如dotPeek)打开它:

& dotPeek64.exe (Get-Command Get-ChildItem).DLL
于 2015-08-24T18:44:03.267 回答
3

您可能还想查看 CodePlex 上的Windows Installer PowerShell 管理单元。这是一个比社区扩展更小的项目,因此更容易了解正在发生的事情。

查看Professional Windows PowerShell Programming: Snapins, Cmdlet, Hosts and Providers (Wrox Professional Guides), ISBN: 0470173939 - 这是我发现的用于编写 cmdlet 和提供程序的最有用的书籍之一。

于 2009-07-09T00:00:39.473 回答
2

您应该能够使用.NET Reflector来“查看”源代码。您需要了解程序集,但也应该使用 GetType 方法或类似方法访问它。

这个PowerShellLanguage .NET Reflector Add-In可能很有用。

于 2008-11-05T19:32:16.377 回答
1

PowerShell cmdlet 的程序集位于 GAC 中。您可以在以下位置找到“Get-ChildItem”cmdlet:

Microsoft.PowerShell.Commands.Management 程序集,Microsoft.PowerShell.Commands.GetChildItemCommand类。

我使用了 ILSpy .NET 反编译器并通过“powershell”字符串过滤了 GAC 程序集。据我了解,Microsoft.PowerShell.Commands.*程序集包含内置 cmdlet。

于 2011-12-14T16:42:41.247 回答
0

我不相信 PowerShell 的源代码曾经发布过。

于 2008-11-05T19:24:12.197 回答
0

可以在参考资源站点上找到一些代码: http ://referencesource.microsoft.com/#System.Management.Automation/System/Management/Automation/ChildItemCmdletProviderIntrinsics.cs,c6eed9f6a5417c19

不过,这只给出了大纲;不是代码的详细信息。

于 2015-08-12T16:00:47.700 回答
0

对于某些安装Install-Module并包含源代码而非二进制文件的 cmdlet(例如 PSnmap):

Install-Module -Name PSnmap

...您可以通过查看以下Definition属性来查看他们的代码:

Get-Command Invoke-PSnmap | Format-List

如果没有,很可能您需要反编译一些二进制文件(例如,在DLL属性中指定的文件)。

于 2021-04-07T20:43:51.730 回答