我有兴趣在一定范围内向文件添加一个属性,该属性包含文件在文件系统中的当前位置,以便跟踪文件移动。我认为可以使用类似于以下命令的New-ItemProperty完成此操作:
Get-ChildItem-递归| foreach {New-ItemProperty -Path $ .FullName -Name“OriginalLocation” -PropertyType字符串-Value $ .FullName}
但是,当我尝试此操作时,出现以下错误:
New-ItemProperty:无法使用界面。此提供程序未实现IDynamicPropertyCmdletProvider接口(interface)。
经过一番搜索,看来New-ItemProperty除了使用注册表外几乎没有用。精细。 Windows还有许多其他文件属性,我应该可以劫持以完成此操作。我想到了“标签”和“标签”。因此,让我们尝试通过Set-ItemProperty设置它们。
Set-ItemProperty:属性System.String Label = D:\ test \ file.txt不存在。
看来我毕竟需要创建这些属性。这是New-ItemProperty的缺点吗?也许在任意项目上设置诸如此类的属性是我不知道的一些WMI问题?
最佳答案
这是我使用重定向('')的解决方案,该重定向允许在CMD.EXE
中操纵备用数据流。它可以在Powershell中正常运行而无需任何扩展
# AlternateDataStream.ps1
$scriptBlockSetStream = {cmd /C `"echo $($Args[0])`>$($Args[1]):$($Args[2])`"}
$scriptBlockGetStream = {cmd /C `"more `<$($Args[0]):$($Args[1])`"}
$streamName = "NativeFilePath"
$File = "C:\Temp\ADSTest\toto.txt"
$streamContent = Split-Path -Path $File -Parent
# Set the data stream
Invoke-Command -ScriptBlock $scriptBlockSetStream -ArgumentList $streamContent,$File,$streamName
# Get the Data Stream
$res = Invoke-Command -ScriptBlock $scriptBlockGetStream -ArgumentList $File,$streamName
$res