2016-12-14 10 views
1

サービスをPowerShell(バージョン4と5)に書き込むと、get-serviceを書くと同じ結果になりますが、サービスはエイリアスではなく、get-commandサービスは認識されないと表示しますコマンドレットとして。PowerShellのコマンドサービスとは

+0

'Get'動詞が暗示されているために動作します。 (私はこれについての参考資料を探しています) –

+0

この誤った機能は、PowerShell 2.0に戻って実際に動作します –

+0

@TessellatingHeckler - この質問の情報はCamillaに関連するかもしれませんが、その質問の複製ではありません。下のBacon BitsとBill_Stewartに同意するので、私はそれを上記の誤った機能と呼んでいます。 –

答えて

2

これはPowerShellの「ヘルパー機能」です。 PowerShellは、パスを検索すると、コマンドレット、実行可能ファイルを検索し、入力したコマンドに "Get-"を付加し、再度コマンドレットを検索します。

私はこの機能を嫌いです。すでにかなりの量のシステムにあいまいさが加えられています。意図的に使用することをお勧めします。

+0

合意 - 私はそれが混乱を招くと思う(結局、この質問を引き起こした)。 –

+0

はい、本当に私を混乱させました。特に最初にGet-を前に置いたと思ったので、get-processの代わりにwriteプロセスを試したところ、別の動作(緑のテキスト)と>>が得られました。 しかし、たとえばスケジュールされたタスクを書くことはGetの前にもあるので、合理的な説明のようです。 –

+2

'process'は' function {begin {..} process {..} end {..}} 'コードブロックと' foreach-object'ループのために使われるキーワードですので、 'process'を書くと待っていますコードブロックの場合 – TessellatingHeckler

1

The answer from Bacon Bitsはまさに正しいものであり、それについての混乱した難しいコメントがあります。

私は何が起こっているのかを見つけるためにTrace-Commandを使用する方法を示してフォローアップしたい:

Trace-Command -Name CommandDiscovery -PSHost -Expression { random } 

CommandDiscoveryを使用すると、PowerShellのエンジンは、あなたがそれを与えるコマンドを解決しようとする際にに行っているすべてのものが表示されます。先に保留中のGet-が最後のステップであることがわかります。その前に来たすべての手順を見ることができます。

+1

ニース!私はそれをどうやって決めるのだろうと思っていました。 –