2017-09-29 10 views
1

私はスクリプトを持っています。 Functionssample.ps1として保存し、powershellコマンドプロンプトから呼び出しました。私は無制限にexecutionpolicyを設定し、「管理者」Windows PowerShell Hello Worldは印刷されません

としてPowerShellを走ってきた。\ Functionssample.ps1「を表示し、HelloWorldの」

私は、コンソール上の「Hello World」が表示されません。

Function Display-HelloWorld 
    { 
     cls 
     Write-Host "Hello World" 

    } 
+0

エリック、私はfuncitionを呼び出しています。私のポストを読んでください。ファイル名と機能 – Jason

答えて

-1

コンソールで代わりにこれを試してください:あなたは今、そのコンソールでそれらを実行することができるように、ユーザーが作成したスクリプトとその機能をロードします

Import-Module .\Functionssample.ps1 

powershell -command "& { . .\script1.ps1; Display-HelloWorld }" 
:私の謝罪、私の最初の投稿は

別のオプションは、つぎのようになり、誤ったコマンドを持っていた:それはモジュールではありませんが、それはまだ

Display-HelloWorld 

編集が...このような状況のために働きます

ドットソーシングを使用してスクリプトを実行し、コマンドを実行します。 .\Functionssample.ps1 Display-HelloWorldしか実行していないのであれば、実際にコマンドを正しく呼び出すようには見えません。それはエラーなく実行されますが、期待しているように実際には関数を実行しません。より経験豊富なPowerShellユーザーが、なぜこの機能が動作しないのかについて説明すると、この記事に役立つはずです。

+0

私が呼び出す方法が動作していない理由を理解しようとしています – Jason

+0

私は参照してください。私は '。\ Functionssample.ps1 Display-HelloWorld'はそれだけで何もしないと思います。関数名を実行しても、実際に関数を実行中に呼び出すようには見えません。私はより多くのオプションで投稿を更新します。 – cet51

3

あなたは関数を含むスクリプトを作成しました。スクリプトはパラメータを受け入れることができるので、.\functionsample.ps1 Display-HelloWorldという呼び出しは、パラメータとして "Display-HelloWorld"(文字列値)をスクリプトに渡すだけです。

スクリプトを実行すると、関数オブジェクトが作成されますが、関数は呼び出されません。あなたの関数を実行するには

、あなたがする必要があるドット・ソースのスクリプトが後に機能が利用できるようにするスクリプト(余分なドットやスペースに注意)

. .\functionsample.ps1 

は、これはあなたの現在のスコープでスクリプトを実行します完了しました。

次に、それを呼び出すことができます。

Display-HelloWorld 
1

選択肢は次のとおりです。

1)ファイルと呼ばれるもので関数を含むスクリプト、およびそれを呼び出すコードを書く - ここでは 'testing.ps1を':

Function Display-HelloWorld 
{ 
    cls 
    Write-Host "Hello World" 
} 
Display-HelloWorld 

# run it 
PS C:\test> .\testing.ps1 
Hello World 

# After it runs, the contents of the script are 'gone' from the current session. 

2)関数コンテンツをfunctionname.ps1というファイルに入れます。関数としてスクリプト自体を扱う:

cls 
Write-Host "Hello World" 

# run it, pretending the file is a function 
PS C:\test> .\Display-HelloWorld.ps1 
Hello World 

3)任意の名前でファイル内の関数のコードを入れてください:

Function Display-HelloWorld 
{ 
    cls 
    Write-Host "Hello World" 
} 

# dot source or Import-Module the code, to load the file contents ready for use 
PS C:\test> Import-Module .\testing.ps1 

# Call the function, loaded from the file 
PS C:\test> Display-HelloWorld 
Hello World 

あなたがそれらを混合している - あなたがファイルにfunction xyzを入れたときに、ファイルを実行すると、スクリプトとして実行されます。関数が定義されています。何もそれを呼びません。機能はメモリから削除されます。ファイルを実行してパラメータを渡すと、ファイル自体が関数であるかのように、文字列パラメータとして 'Display-HelloWorld'をファイルに渡して、Mike Shepardが言うように2)のようになります。パラメータを受け入れるブロックはparam()ではありませんので、何もしません。

関連する問題