40

私はいくつかのPowerShellを学んでいます。Get-ChildItem のような組み込みコマンドレットのソース コードを確認することはできますか?

4

10 に答える 10

27

Powershell のソースが Github で利用できるようになりました。
のソースはGet-ChildItemここにあります

于 2016-08-20T20:11:56.330 に答える
22

実際、最善の策は、PowerShell Community Extensionsを確認することです。このオープン ソース ソフトウェア コミュニティ プロジェクトは、「広く役立つ一連の追加コマンドレットを提供することを目的としています...」。プロジェクトの開発者は PowerShell MVP であり、彼らのことをよく知っています。

既存の PowerShell コマンドレットでリフレクションを使用する限り、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 を置き換える任意のコマンドレットを入力します。それについてもっとグーグルしたい場合は、これがプロキシ関数を作成する方法です。

于 2013-12-10T01:45:40.903 に答える
3

また、CodePlexの Windows インストーラー PowerShell スナップインも参照してください。これはコミュニティ拡張よりも小さなプロジェクトなので、何が起こっているのかを理解するのは簡単です。

Professional Windows PowerShell Programming: Snapins, Cmdlets, Hosts and Providers ( Wrox Professional Guides) (ISBN: 0470173939) を参照してください。これは、コマンドレットとプロバイダーの作成に役立つ本の 1 つです。

于 2009-07-09T00:00:39.473 に答える
2

.NET Reflectorを使用してソース コードを「見る」ことができるはずです。ただし、アセンブリを知る必要がありますが、GetType メソッドなどを使用してアクセスする必要もあります。

このPowerShellLanguage .NET Reflector Add-Inは、おそらく役に立ちます。

于 2008-11-05T19:32:16.377 に答える
1

PowerShell コマンドレットのアセンブリは GAC にあります。「Get-ChildItem」コマンドレットは次の場所にあります。

Microsoft.PowerShell.Commands.Management アセンブリ、Microsoft.PowerShell.Commands.GetChildItemCommandクラス。

ILSpy .NET 逆コンパイラを使用し、GAC アセンブリを「powershell」文字列でフィルタリングしました。私が理解しているように、Microsoft.PowerShell.Commands.*アセンブリには組み込みのコマンドレットが含まれています。

于 2011-12-14T16:42:41.247 に答える
0

PowerShell のソース コードがリリースされたことはないと思います。

于 2008-11-05T19:24:12.197 に答える
0

一部のコードは、次の参照リソース サイトにあります

ただし、これは概要のみを示しています。コードの詳細ではありません。

于 2015-08-12T16:00:47.700 に答える