1. ホーム
  2. powershell

[解決済み] Resolve-Pathコマンドレットは、具体的にどのような処理を行うのですか?

2022-02-16 13:39:06

質問

最近、Windows10システムでPowershellを使うようになりました。プロファイルファイルを作成し、ドキュメントセクションのフォルダーにリンクする変数を入れたいと思いました。しかし、前回修理に出したときのように、ハードドライブの移動でプロファイル名が変更された場合、パスをハードコードして書き直す必要があると思ったので、パスをハードコードしたくはありませんでした。そこで、最初に考えたのは、次のようなものを入れることでした。

$Var = $(~\Documents\Folder)

しかし、それはエラーを返した。そこで、Resolve-Path Cmdletの存在を知り、一見して私が必要としているものに見えた。しかし、これを実行すると

$Var = $(Resolve-Path ~\Documents\Folder)

... こうなりました。

>$Var

Path
----
C:\Users\Username\Documents\Folder

>

これは問題ないように思えた。しかし、試しに cd $Var を実行すると、正常に動作したため、非常に困惑しました。私は、この余計な Path ヘッダがあるとエラーになります。

は具体的にどのようなものなのでしょうか? Resolve-Path する に渡されたとき、なぜ正しく解釈されるのでしょうか? cd ? また、このような状況で Resolve-Path ではなく は余計な情報を含まず、展開されたパスのみを返すのですか?

解決方法は?

ヘッダーが表示される原因 Path というのは Resolve-Path の型のオブジェクトを返しています。 System.Management.Automation.PathInfo で、これが変数に取り込まれないと、文字列としてコンソールに可読形式のIEで出力されます。

 ObjProperty1      ObjProperty2      ObjProperty3  ...
 ---------         ---------         ---------     ...
 Value1            Value2            Value3        ...

このオブジェクトは cd として PowerShell は十分に賢いので、オブジェクトをパースします ( $var の前に cd が実行されます。 PowerShell は、path プロパティの値を cd 意味 cd には文字列が表示されます。 "C:\Users\Username\Documents\Folder" であり、オブジェクトヘッダーではありません。

ヘッダを除いたパスだけを返したい場合は Select コマンドレットの -ExpandProperty パラメータを指定します。

$var = Resolve-Path '~\Documents\Folder' | select -ExpandProperty Path 

についてもっと詳しく知りたい場合は Resolve-Path MSDNは良い場所です( リンク ).