有馬総一郎のブログ

(彼氏の事情)

2018年12月06日 22:26:38 JST - 2 minute read - PowerShell

PowerShellでコマンドレットの返り値を取得してダブルコーテーションで括りたい

ちょっとしたスクリプト作るのに、いくつか落とし穴があったのでメモ。(`コマンド`$(コマンド)的なのは PowerShell ではどうやるんだろうなぁみたいな。

環境変数パスと特定のフォルダ名を結合したパス文字を取得しようとして$folder = Join-Path [Environment]::GetFolderPath('MyDocuments') "Specified folder"をすると

Join-Path : 引数 'Specified folder' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:11
+ $folder = Join-Path [Environment]::GetFolderPath('MyDocuments') "Spec ...
+ +           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     + CategoryInfo          : InvalidArgument: (:) [Join-Path]、ParameterBindingException
+         + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.JoinPathCommand
+

みないなエラーが出る。何でだろうか…

ならばと"ダブルコーテーションで括って、$folder = Join-Path "[Environment]::GetFolderPath('MyDocuments')" "Specified folder"を実行したら、当たり前に文字列として扱われてエラー。

Join-Path : 名前 '[Environment]' を持つプロバイダーが見つかりません。
発生場所 行:1 文字:11
+ $folder = Join-Path "[Environment]::GetFolderPath('MyDocuments')" "Sp ...
+ +           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     + CategoryInfo          : ObjectNotFound: ([Environment]:String) [Join-Path], ProviderNotFoundException
+         + FullyQualifiedErrorId : ProviderNotFound,Microsoft.PowerShell.Commands.JoinPathCommand

環境変数取得と結合箇所を分けるしかないのかなぁと思ったら PowerShell の文字列について – Exchange ブログ JAPANにあるとおり"$(取得コマンドレット)"という記述で行けるんですね!

$folder = Join-Path "$([Environment]::GetFolderPath('MyDocuments'))" "Specified folder"で成功した。

以下、他の参照サイト