我正在寻找一个PowerShell函数,如Get-LocalizedName($FilePath),返回文件的本地化名称或它的文件名,如果它不是本地化的。我知道本地化的名称存储在各个desktop.ini文件的desktop.ini部分,但通常作为资源文件指针而不是清除名称。
示例:对于管理工具文件夹和locale de-DE,我希望使用清晰的名称而不是@%SystemRoot%\system32\shell32.dll,-21762。
我无法找到这样的函数,也没有成功地分析Get-ChildItem或google关于解决方案的属性。
我可以从PowerShell (v7)中使用这样的函数吗?
发布于 2022-06-21 15:17:13
以下解决方案仅适用于文件夹。有关通过this answer的LocalizedFileNames部分本地化的文件的解决方案,请参见Desktop.ini。
这可以使用Shell.Application COM对象来完成:
$shell = New-Object -ComObject Shell.Application
# Get full path to the admin tools folder
$adminToolsPath = [Environment]::GetFolderPath('AdminTools')
# Get the shell folder corresponding to this path
if( $folder = $shell.NameSpace( $adminToolsPath ) ) {
$folder.Title # Output localized title
}
# Alternative:
if( $folder = $shell.NameSpace( [Environment+SpecialFolder]::AdminTools ) ) {
$folder.Title # Output localized title
}[Environment]::GetFolderPath()](https://learn.microsoft.com/en-us/dotnet/api/system.environment.getfolderpath?view=net-6.0#system-environment-getfolderpath(system-environment-specialfolder%29)给出了系统文件夹的文件系统路径。Shell.Namespace()函数返回与该路径对应的Folder对象,可以查询该路径的本地化名称。[Environment+SpecialFolder]枚举值传递给传递给Shell.Namespace()方法的路径的Shell.Namespace() E 122通过“desktop.ini”E 223定制的任何文件夹。即使它不是一个系统文件夹。发布于 2022-06-22 08:00:54
我终于找到了一种解决方案,用于Get-LocalizedName,使用GetDetailsOf挖掘20年前的VBS代码:
function Get-LocalizedName {
Param([Parameter(Mandatory=$True)][string]$FilePath)
$ChildObj = Get-ChildItem $FilePath
$FldrName = $ChildObj.DirectoryName
$FileName = $ChildObj.Name
$Shell = New-Object -ComObject Shell.Application
$Folder = $Shell.Namespace($FldrName)
$File = $Folder.ParseName($FileName)
return $($Folder.GetDetailsOf($File,0))
}https://stackoverflow.com/questions/72702610
复制相似问题