web-dev-qa-db-ja.com

PowerShellコマンドレットのソースコードを確認できますか?

PowerShellについて学習しています。 Get-ChildItem のような組み込みコマンドレットのソースコードを表示することは可能ですか?

31
Blankman

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

既存のPowerShellコマンドレットでリフレクションを使用する限り、PowerShell MVP Oisin Grehanは、「 Reflect-Cmdlet "」というタイトルの便利な関数を作成しました。彼のコードを盗んでここに配置することはしませんが、基本的には次のようにします。

Get-Command Get-ChildItem | Reflect-Cmdlet

そして 。NET Reflector がポップアップし、右側のアセンブリが開いて展開され、すべてが表示されます。本当にかっこいいです。これがスクリーンショットです:

代替テキストhttp://halr9000.com/images/screenshots/reflector.png

21
halr9000
18
Zev Spitz

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を置き換えるコマンドレットを入力します。あなたがそれについてもっとグーグルしたいなら、これはあなたがプロキシ関数を作成する方法です。

10
ImpossibleSqui

コンパイルされたコマンドレットの場合、次のコマンドで.dllへのパスを取得できます。

(Get-Command Get-ChildItem).DLL

Get-ChildItemを目的のコマンドレットに置き換えます)

.dllへのパスがわかれば、 dotPeek :のような.NET逆アセンブラで開くことができます。

& dotPeek64.exe (Get-Command Get-ChildItem).DLL
5
Michael Kropat

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

2
EBGreen

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

これ PowerShellLanguage .NETリフレクターアドイン はおそらく便利です。

2
dalle

CodePlexの WindowsインストーラーPowerShellスナップイン もご覧ください。これはコミュニティ拡張機能よりも小さなプロジェクトであるため、何が起こっているのかを簡単に把握できます。

Professional Windows PowerShell Programming:Snapins、Cmdlets、Hosts and Providers(Wrox Professional Guides)、ISBN:0470173939-これは私が最も役立つ本の1つです。コマンドレットとプロバイダーを作成するために見つかりました。

2

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

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

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

1
ssvinarenko

一部のコードは、リファレンスリソースサイトにあります。 http://referencesource.Microsoft.com/#System.Management.Automation/System/Management/Automation/ChildItemCmdletProviderIntrinsics.cs,c6eed9f6a5417c19

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

0
JohnLBevan