web-dev-qa-db-ja.com

Linux `ls -l`に相当するWindows PowerShell

PowerShellにLinuxの動作をエミュレートする方法はありますかls -lコマンド?

シンボリックリンクが指すものを確認したいと思います。具体的には、PowerShell New-Symlinkユーティリティと-Pathがディスク上のどこにあるかを知りたいです。

(はい、自分で作成したので-Pathは知っていますが、ls -l他のいくつかの状況では同等です。)

8
tmaynard

Powershellは、これを最初からサポートしていないようです。 シンボリックリンクがあるかどうかを示すためにPowerShellでdirを使用する方法を説明する記事がありますが、リンクのターゲットは表示されません 。リンクのターゲットを表示するには、2つのオプションがあります。最初にfsutil reparsepoint queryを使用するか、コマンドプロンプトからdirを使用します。どちらにも欠点があります。 1つ目はターゲットパスを16進データとして示し、2つ目はコマンドプロンプトからPowerShellエイリアスdirからGet-ChildItemとして実行する必要がありますが、シンボリックリンクは表示されません。

これを試して

Get-ChildItem | % { fsutil reparsepoint query $_ }
cmd /c dir /a:l

私が思いつくことができる最良の答えは次のとおりです(必要に応じて、正規表現一致グループを使用して、より多くの情報を抽出します)。

$PATH="C:\tmp"
cmd /c dir $PATH | ? { $_ -match '([\d\.]+)\s+([\d:]+)\s+(\S+)\s+([^\[]+)\s*\[?([^\]]*)\]?' } | % { New-Object -TypeName PSCustomObject -Property @{Name=$matches[4];Target=$matches[5]}}

出力は次のようになります

Target                                                      Name
------                                                      ----
                                                            .
                                                            ..
                                                            file.txt
C:\tmp\file.txt                                             symlink.txt
3