5

ファイルと同じ名前のファイルに関数が1つしかない場合、これは可能ですか? 以前読んだ記憶があるようです。このようなもの:

こんにちは.ps1

function hello {
    Write-Host 'Hello, world'
}
4

2 に答える 2

6

関数呼び出しを完全に取り除きます。名前付きパラメーターとコマンドレットのラッピングはまったく失われません。したがって、この:

 function Hello
 {
    [CmdletBinding()]
    param(
       [Parameter(Mandatory=$true)]
       $Message
    )
    Write-Host "Hello, $Message!"
 }

になります:

 [CmdletBinding()]
 param(
    [Parameter(Mandatory=$true)]
    $Message
 )
 Write-Host "Hello, $Message!"

そして、あなたはこのようにそれをすべてすることができます:

> .hello.ps1 "World"
于 2012-07-10T23:34:39.533 に答える
5

デフォルトでは、スクリプトをドット ソース化しない限り、関数 hello はスクリプト スコープでのみアクセスできます。つまり、スクリプトが終了すると、それは表示されなくなります。ドット ソースを使用せずに hello.ps1 の外部で使用できるようにする場合は、関数をグローバル スコープで宣言できます。

function global:hello {
    Write-Host 'Hello, world' 
}

次に、スクリプトを実行して関数を呼び出すだけです。

PS C:\temp> .\hello.ps1
PS C:\temp> hello
Hello, world

PowerShell スコープの詳細については、ヘルプをご覧ください。

関数内のコードだけを実行したい場合は、関数宣言で囲まないでください。でhello.ps1

    Write-Host 'Hello, world' 

次に、それを呼び出します:

PS C:\temp> .\hello.ps1
Hello, world
于 2012-07-10T20:12:56.993 に答える