问题很简单,我的应用程序将某个文件从一个位置复制到另一个位置。
所有管理员都应读取目标文件夹中的文件,而无需提升特权。
我找到了应该使用的API:
但是我不太会使用Windows API,并且此安全API相当复杂,因此我需要使用该API的帮助。
我的主要问题是如何获得$ds=GCI "C:\Users\Personal\Documents\Misc"|?{$_.PSIsContainer}|Select -Exp FullName
ForEach($f In $ds){
$gs=GCI $f|?{(!($_.PSIsContainer))}|Group Extension
ForEach($g In $gs){
$n=Join-Path $f($g.Name.Substring(1,($g.Name.Length-1)))
If(-Not(Test-Path $n)){[Void](MD $n)}
$g.Group|Move -Dest $n
}
}
?其他内容很明显,或者我只能提供psidGroup
。
还是有更好的API,以便在复制文件时可以为管理员添加此读取权限?
答案 0 :(得分:0)
psidGroup
中的 SetNamedSecurityInfo
用于更改文件的所有者或组。 msdn上有an example,请先获取旧的安全信息,然后再修改(SetEntriesInAcl
)并提交(SetNamedSecurityInfo
)。如果要设置组的权限,请将EXPLICIT_ACCESS.Trustee.TrusteeType
设置为TRUSTEE_IS_GROUP
,则可以设置组的权限。