我正在编写一个 PowerShell 脚本,需要以“任何用户”的身份编辑声明到 Windows 令牌服务 (C2WTS) 的 xml 配置文件,但一旦我对 XML 对象进行了更改,就无法保存该文件。使用以下代码:
$xml.load("C:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe.config")
changes here
$xml.save("C:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe.config")
运行此代码,我收到错误:
使用“1”个参数调用“保存”时发生异常:“拒绝访问路径‘C:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe.config’。”
我尝试设置 ACL,以便运行脚本的用户可以使用以下代码编辑 XML 文件:
$acl = Get-Acl "C:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe.config"
$Ar = New-Object system.Security.AccessControl.FileSystemAccessRule($user,"FullControl","Allow")
$acl.SetAccessRule($Ar)
Set-Acl "C:\Program Files\Windows Identity Foundation\v3.5\c2wtshost.exe.config" $acl
但返回错误:
“Set-Acl:尝试执行未经授权的操作。”
有人能帮助我保存对 XML 文件所做的更改吗?
答案1
不确定您使用的是什么操作系统,但 Vista 内核讨厌向 Program Files 写入任何内容,安装程序除外。一些较旧的程序不兼容,因为它们尝试将更新等下载到该文件夹并失败。我没有调查原因,因为我认为这总体上是一件好事。但我确信涉及权限问题。您是否检查过目标文件夹及其父文件夹的权限?
此外,我不知道这有多大关系,但如果该文件被任何人访问,它将无法编辑。产生的错误消息通常与权限问题类似。你知道该文件是否有另一个句柄吗?