我为我的磁盘上的数据使用情况做了一个报告,我从所有选定的属性获取信息,如名称,路径,大小...代表一个文件描述,对于每个扫描文件,此属性为空。例如,当您在Windows资源管理器中选择文件并在常规选项卡中选择属性时,您可以看到"文件类型",此处对于Excel文件,文件类型为" Microsoft Excel工作表(。 XLSX)&#34 ;.
gci c:\file | select *
我如何获得此信息?
答案 0 :(得分:7)
我希望尽可能避免使用外部程序,所以我建议使用注册表。
$ext = ".xlsx"
$desc = (Get-ItemProperty "Registry::HKEY_Classes_root\$((Get-ItemProperty "Registry::HKEY_Classes_root\$ext")."(default)")")."(default)"
$desc
Microsoft Excel-regneark #Norwegian description
要与Select-Object
一起使用,您可以像这样修改它:
#You could define this inside Select-Object too, but it's a bit long so I extracted it first to clean up the code.
$extensiondesc = @{n="ExtensionDescription";e={ (Get-ItemProperty "Registry::HKEY_Classes_root\$((Get-ItemProperty "Registry::HKEY_Classes_root\$($_.Extension)")."(default)")")."(default)" }}
Get-ChildItem |
Select-Object Extension, $extensiondesc
Extension ExtensionDescription
--------- --------------------
.oxps XPS Document
.lnk Shortcut
.txt Text Document
答案 1 :(得分:5)
让我们说$ext
有文件的扩展名。
例如 -
$ext = ".bmp"
以下代码将为您提供描述(如果已注册)(您应该根据您的方案添加更好的错误处理) -
$desc = (cmd /c assoc $ext).Split("=")[1]
$desc = (cmd /c assoc $desc).Split("=")[1]
Write-Host $desc
AFAIK,Powershell没有任何内置机制来获取此信息,因此使用PowerShell中的cmd是最便宜和最简单的解决方案恕我直言。
答案 2 :(得分:1)
您可以使用Shell.Application
对象的GetDetailsOf()
方法:
$app = New-Object -COM 'Shell.Application'
$f = Get-Item 'C:\path\to\your\file'
$dir = $app.NameSpace($f.Directory.FullName)
$description = $dir.GetDetailsOf($dir.ParseName($f.Name), 2)
答案 3 :(得分:0)
我刚刚在Frode F的解决方案上进行了即兴创作,添加了一个带有唯一条目的排序列表,以便于阅读。
$extensiondesc = @{n="ExtensionDescription";
e={(Get-ItemProperty "Registry::HKEY_Classes_root\$((Get-ItemProperty "Registry::HKEY_Classes_root\$($_.Extension)")."(default)")")."(default)" }}
Get-ChildItem |
Select-Object -unique Extension, $extensiondesc |Sort-Object @{e="Extension";Ascending=$true},@{e="ExtensionDescription";Ascending=$false}