[解決済み】PowerShellの関数の戻り値について
質問
プロビジョニングに関連するいくつかのアクションを実行するPowerShell関数を開発しました。 シェアポイント チームサイトです。最終的には、プロビジョニングされたサイトの URL を文字列として返すようにしたいので、関数の最後に以下のコードを記述しています。
$rs = $url.ToString();
return $rs;
この機能を呼び出すコードは、次のようになります。
$returnURL = MyFunction -param 1 ...
だから、私はStringを期待しているのですが、そうではありません。代わりに、System.Management.Automation.PSMethod.System.Management.Automationのタイプのオブジェクトがあります。なぜ、String型ではなく、その型を返しているのでしょうか?
どうすればいいですか?
PowerShell は、少なくとも伝統的なプログラミングの観点から見た場合、実に奇妙な戻り値のセマンティクスを持っています。頭を整理するために、2つの主要な考え方があります。
- すべての出力をキャプチャし、返します。
- returnキーワードは、単に論理的な終了点を示すものです。
したがって、次の2つのスクリプトブロックは、実質的にまったく同じことを行うことになります。
$a = "Hello, World"
return $a
$a = "Hello, World"
$a
return
2番目の例の変数$aは、パイプライン上の出力として残され、前述のように、すべての出力が返されます。実際、2番目の例ではreturnを完全に省略しても同じ動作になります(returnは関数が自然に完了し終了するときに暗示されます)。
PSMethod オブジェクトを取得する理由については、関数定義の詳細がわからないため、何とも言えません。推測するに、おそらく数行上の何かがキャプチャされず、出力パイプラインに配置されているのでしょう。
また、注目すべきは、あなたが おそらく ただし、1行に複数の式を入れ子にしている場合は、このセミコロンは不要です。
戻り値のセマンティクスについては
約_Return
のページを参照するか、TechNet の
help return
コマンドを PowerShell 自身から実行します。
関連
-
[解決済み] PowerShellスクリプトのファイルシステムの場所を取得するにはどうすればよいですか?
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] PowerShellでコードをコメントアウトする方法とは?
-
[解決済み] Windows PowerShellの環境変数を設定する
-
[解決済み] PowerShellで文字列と変数を連結する方法は?
-
[解決済み] PowerShellでコマンドライン引数を処理する方法
-
[解決済み] PowerShellで関数に複数のパラメータを渡すにはどうすればよいですか?
-
[解決済み] PowerShellでスクリプトを終了させる
-
[解決済み】PowerShellスクリプトを実行する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Powershell - 空のパイプ要素は許可されません。
-
[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?
-
[解決済み] PowerShellで遠隔地からファイルをコピーする
-
[解決済み] powershell で $args 配列にアクセスする
-
[解決済み] powershellスクリプトで、最後に改行を入れずにWrite-Warningすることはできますか?
-
[解決済み] グローバル変数名が関数に渡された変数である関数からPowerShellのグローバル変数を設定する
-
[解決済み] PowerShellスクリプトのファイルシステムの場所を取得するにはどうすればよいですか?
-
[解決済み] コピーアイテムはデフォルトで上書きをする
-
[解決済み] PowershellでTimeZoneを設定する方法
-
[解決済み] Install-Module : 'Install-Module' という用語は、コマンドレット名として認識されません。