ちょっとしたスクリプト作るのに、いくつか落とし穴があったのでメモ。(`コマンド`
や$(コマンド)
的なのは 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"
で成功した。
以下、他の参照サイト