tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

PowerShellでフォルダを開く

ふと思ってアレもしかして意外と纏められてない?と思ったので。 cmd/batchなら explorer パス や start パス ですが……さてコマンドレットで開くには?

PowerShell上のカレントディレクトリを開く

つべこべ言わず今のフォルダを開きたい。 そんな方はこれで。
Invoke-Item .
あるいはこれでも
Start-Process .
もっと短い方がいい?ではこれで。
ii .
あるいはcmd風にこれでも
start .

[IO.FileInfo]として渡すなら

パスオブジェクトを開く場合は、Invoke-Itemで起動します。 つまりこう。
$pathObject = [IO.FileInfo]"D:\"
Invoke-Item $pathObject
この時、Start-Processを使うとエラーが出るので注意!
$pathObject = [IO.FileInfo]"D:\"
Start-Process $pathObject
理由はまんまですね、Start-ProcessにはStringを渡す必要があるのです。
Start-Process : パラメーター 'FilePath' で必要とされる型 'System.String' に 'System.IO.FileInfo' を変換できません。指定されたメソッドはサポートされていません。
発生場所 行:1 文字:15
+ Start-Process $pathObject
+               ~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Start-Process]、ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.StartProcessCommand

[string]として渡すなら

では、文字列と渡した場合は、どうしましょう。 実は、Invoke-Itemは優秀で、パスオブジェクトではなく文字列でもいけちゃいます。
$pathString = "D:\"
Invoke-Item $pathString
そして先ほどのStart-Process、これもエクスプローラーを起動できます。
$pathString = "D:\"
Start-Process $pathString

まとめ

フォルダを開くなら、Invoke-Itemがベストですね。 お好きなやり方でどうぞ。
$pathObject = [IO.FileInfo]"D:\"
Invoke-Item $pathObject
ii $pathObject

$pathString = "D:\"
Invoke-Item $pathString
ii $pathString
Start-Process $pathString
Start $pathString

Invoke-Item .
ii .

Start-Process .
start .