35

これは奇妙なものです。通常、powershell から外部コマンドを実行するときは、次の&ような演算子を使用します。

& somecommand.exe -p somearguments

.ただし、今日、次のように使用される演算子に出くわしました。

.$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd install notepadplusplus

このシナリオでは、期間はどのような目的に役立ちますか? 理解できません。

4

5 に答える 5

36

「。」dot sourcing operatorは、呼び出した他のスクリプトから変数を送受信します。「&」呼び出し演算子は、変数のみを送信します。

たとえば、次のことを考慮してください。

スクリプト 1 (call-operator.ps1):

clear

$funny = "laughing"

$scriptpath = split-path -parent $MyInvocation.MyCommand.Definition
$filename = "laughing.ps1"

"Example 1:" # Call another script. Variables are passed only forward.

& $scriptpath\$filename

"Example 2:" # Call another script. Variables are passed backwards and forwards.

. $scriptpath\$filename
$variableDefinedInOtherScript

スクリプト 2 (笑い.ps1):

# This is to test the passing of variables from call-operator.ps1

"I am $funny so hard. Passing variables is so hilarious."

$variableDefinedInOtherScript = "Hello World!"

両方のスクリプトを作成し、最初のスクリプトのみを実行します。「。」が表示されます。ドットソーシング演算子は変数を送受信します。

どちらにも用途がありますので、創造性を発揮してください。たとえば、現在のスクリプトの元の値を保持しながら、別のスクリプトの変数の値を変更する場合は、「&」呼び出し演算子が役立ちます。ちょっとしたお守り。;)

于 2012-08-09T20:51:09.370 に答える
6

ドットは呼び出し演算子です。

$a = "Get-ChildItem" 
. $a # (executes Get-ChildItem in the current scope)

ただし、あなたの場合、それが何をするのかわかりません。

于 2012-05-23T20:05:46.883 に答える
2

オブジェクトプロパティの.Periodまたは.fullstop; お気に入り

$CompSys.TotalPhysicalMemory

ここを参照してください:http://www.computerperformance.co.uk/powershell/powershell_syntax.htm#Operators_

于 2012-05-23T20:08:57.140 に答える
0

この回答は、David Brabant と彼のコメント作成者によって既に提供されているものを少し拡張したものです。これらの発言はすべて真実で適切ですが、見落とされているものがあります。

&外部コマンドを呼び出す際の OP の使用は不要です。を省略し&ても効果はありません (彼の使用例では)。の目的は&、名前が (文字列) 式の値であるコマンドの呼び出しを許可することです。上記を使用することにより&、powershell は (本質的に) 後続の引数を文字列として扱います。最初の引数は、&正式に呼び出すコマンド名です。が省略された場合、powershell は実行するコマンドとして&行の最初の項目を取ります。

ただし、.2番目の例必要です(ただし、他の人が指摘したよう&に、この場合も同様に機能します)。これがないと、コマンド ラインは変数アクセス ( $env:systemdrive) で始まるため、powershell は何らかの形式の式を期待します。ただし、変数参照の直後にあるのは有効な式ではない裸のファイル パスであり、エラーが発生します。.行の先頭に(または)を使用する&ことで、コマンドとして扱われるようになり (先頭が有効な式のように見えないため)、引数は展開可能な文字列 ( " ") として処理されます。したがって、コマンドラインは次のように扱われます。

. "$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd" "install" "notepadplusplus"

最初の引数が$env:systemdriveそれに代入され、その.ように名付けられたプログラムを呼び出します。

注: powershell がコマンド ライン引数を処理する方法の完全な説明は、ここで説明するよりもはるかに複雑です。このバージョンは、質問に答えるのに必要な部分だけに切り詰められています。包括的な説明については、about_Parsingをご覧ください。完全ではありませんが、ほとんどの通常の使用法をカバーする必要があります。stackoverflow と github (powershell が現在存在する場所) には、公式ドキュメントに記載されていない一見風変わりな動作のいくつかをカバーする他の投稿があります。もう 1 つの便利なリソースはabout_Operatorsですが、これも完全ではありません。例としては、powershell スクリプト/コマンドレット以外の何かを呼び出すときと同等で.あり、まったく言及されていません。&

于 2021-06-13T17:26:46.153 に答える