这不是我的代码,我真的不太了解powershell,但我在这里有一个脚本来访问文件(或其他东西)。特殊字符(例如撇号)出现错误,我知道转义序列,但我通过文件夹和每个文件夹(以及后来的文件)解析我在每个文件夹上使用setaccesscontrol /文件。我不能为每个转义序列使用转义序列,因为它存储在$ fol变量中,并且每个循环都不同。我是一个全新的人,根本没有获得powershell,但我确实得到了java,所以我基于这个理解。任何帮助表示赞赏。
foreach($Fol in $Folder2){
$fol = $fol.fullname
$NewOwnerACL = New-Object System.Security.AccessControl.FileSecurity
$Admin = New-Object System.Security.Principal.NTAccount($WhoIsNewOwner)
write-host ...$Admin to $Fol -Fore Yellow
$NewOwnerACL.SetOwner($Admin)
[System.IO.File]::SetAccessControl($fol, $NewOwnerACL)}
错误是:
异常调用" SetAccessControl"用" 2"参数(一个或多个): " C:\ shares \ Operations ...撇号"
在C:\ cp \ PermissionFixer.ps1:28 char:5
+ [System.IO.File] :: SetAccessControl($ fol,$ NewOwnerACL)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException
+ CategoryInfo:FileNotFoundException
编辑:我发现那些长长的破折号搞砸了。我在这个脚本上使用robocopy来超过255或任何世界限制,我认为它可能是错误地读取长短划线?除了解析每个寻找它的字符串之外,还有什么方法吗?
答案 0 :(得分:0)
您不需要转义序列,因为不涉及字符串解析。
Hackerman提供了我认为是该问题评论中的关键指针: $fol
可能只是指向不存在的路径。
您报告的错误消息中包含的CategoryInfo
值也支持此功能:FileNotFoundException
。
至于对“撇号”的引用:我最好的猜测是$fol
中包含的路径实际上可能实际上包含该词。
撇号('
)是合法的NTFS文件名字符,所以它们应该不是问题。