这似乎是一个非常简单的问题,但谷歌搜索没有给我什么。 这是错误(PS 5.1,胜利10.0.14393 x64):
Set-ItemProperty $myFileInfo -Name Attributes -Value ([System.IO.FileAttributes]::Temporary)
The attribute cannot be set because attributes are not supported. Only the following attributes can be set: Archive, Hidden, Normal, ReadOnly, or System.
attrib.exe
似乎支持大多数System.IO.FileAttributes
。不幸的是,似乎不适用于使用FileSystem PSDrives引用的文件。这就是我广泛使用的。
为SetFileAttributes内核API调用创建包装器将是最后的选择。
我是否缺少设置这些扩展文件属性的其他[更简单]方法?
PS。除[System.IO.FileAttributes]::Temporary
之外,我有兴趣设置[System.IO.FileAttributes]::NotContentIndexed
。
答案 0 :(得分:5)
您可以直接编辑[FileInfo]
对象的Attributes属性。例如,如果要排除C:\ Temp文件夹中的所有文件进行内容索引,则可以执行以下操作:
Get-ChildItem C:\Temp | ForEach{
$_.Attributes = $_.Attributes + [System.IO.FileAttributes]::NotContentIndexed
}
这将获取每个文件,然后将[System.IO.FileAttributes]::NotContentIndexed
属性添加到现有属性。您可以过滤文件以确保在尝试添加之前该属性尚不存在,因为这可能会导致错误(我不知道,我没有尝试过)。
编辑:正如@grunge所述,这在Windows Server 2012 R2中不起作用。相反,您需要做的是引用value__
属性,它是按位标志值,并为NotContentIndexed
添加按位标志。这适用于任何Windows操作系统:
Get-ChildItem C:\Temp | ForEach{
$_.Attributes = [System.IO.FileAttributes]($_.Attributes.value__ + 8192)
}