私はいくつかのPowerShellを学んでいます。Get-ChildItem のような組み込みコマンドレットのソース コードを確認することはできますか?
10 に答える
Powershell のソースが Github で利用できるようになりました。
のソースはGet-ChildItem
ここにあります。
実際、最善の策は、PowerShell Community Extensionsを確認することです。このオープン ソース ソフトウェア コミュニティ プロジェクトは、「広く役立つ一連の追加コマンドレットを提供することを目的としています...」。プロジェクトの開発者は PowerShell MVP であり、彼らのことをよく知っています。
既存の PowerShell コマンドレットでリフレクションを使用する限り、PowerShell MVP Oisin Grehan は「Reflect- Cmdlet」という便利な関数を作成しました。彼のコードを盗んでここに置くつもりはありませんが、基本的には次のことを行います。
Get-Command Get-ChildItem | Reflect-Cmdlet
そして、.NET Reflectorがポップアップし、適切なアセンブリが開いて展開され、すべてが表示されます。それは本当にかなりクールです。
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 を置き換える任意のコマンドレットを入力します。それについてもっとグーグルしたい場合は、これがプロキシ関数を作成する方法です。
また、CodePlexの Windows インストーラー PowerShell スナップインも参照してください。これはコミュニティ拡張よりも小さなプロジェクトなので、何が起こっているのかを理解するのは簡単です。
Professional Windows PowerShell Programming: Snapins, Cmdlets, Hosts and Providers ( Wrox Professional Guides) (ISBN: 0470173939) を参照してください。これは、コマンドレットとプロバイダーの作成に役立つ本の 1 つです。
.NET Reflectorを使用してソース コードを「見る」ことができるはずです。ただし、アセンブリを知る必要がありますが、GetType メソッドなどを使用してアクセスする必要もあります。
このPowerShellLanguage .NET Reflector Add-Inは、おそらく役に立ちます。
PowerShell コマンドレットのアセンブリは GAC にあります。「Get-ChildItem」コマンドレットは次の場所にあります。
Microsoft.PowerShell.Commands.Management アセンブリ、Microsoft.PowerShell.Commands.GetChildItemCommandクラス。
ILSpy .NET 逆コンパイラを使用し、GAC アセンブリを「powershell」文字列でフィルタリングしました。私が理解しているように、Microsoft.PowerShell.Commands.*アセンブリには組み込みのコマンドレットが含まれています。
PowerShell のソース コードがリリースされたことはないと思います。
一部のコードは、次の参照リソース サイトにあります 。
ただし、これは概要のみを示しています。コードの詳細ではありません。