我正在尝试创建一个 Powershell 脚本,该脚本将部署到更新运行状况不佳的任何节点,以自动执行一些简单任务,而无需在用户工作期间打扰他们。如果从提升的 PS 提示符运行,Powershell 脚本将完美运行。当通过 SCCM 将同一脚本部署到测试机器时,它也运行良好,但有一个异常(exception):它不会调用 SFC.EXE/SCANNOW
。
我试过使用:
Start-Process -FilePath "${env:Windir}\System32\SFC.EXE"-ArgumentList '/scannow' -Wait -NoNewWindow
Start-Process -FilePath "sfc.exe"-ArgumentList '/scannow' -Wait -NoNewWindow
启动进程 -FilePath "${env:Windir}\System32\SFC.EXE"-ArgumentList '/scannow' -RedirectStandardOutput "C:\SFC-Out.log"-RedirectStandardError "C:\SFC -Err.log"-Wait -NoNewWindow
& "sfc.exe""/scannow"
调用命令 -ScriptBlock { sfc.exe/scannow }
同样,所有这些示例在从提升的 PS 提示符运行时都完全按预期工作,但在从已部署的 PowerShell 脚本运行时失败。当我使用 -RedirectStandardOutput 时,我检查了文件 SFC-Out.log 并读取:
“Windows 资源保护无法启动修复服务”
我认为这是因为 SCCM 在 SYSTEM 上下文而不是用户上下文(甚至是提升的用户上下文,但 SYSTEM 应该高于提升的 session )中运行程序/脚本。
有没有办法做到这一点?抱歉格式不正确,这是我在这个网站上的第一篇文章。
最佳答案
有点晚了,但我遇到了同样的问题。不确定您是否属于这种情况,但原因是使用 SCCM 配置脚本部署以作为 32 位进程运行。该脚本正在部署到 64 位系统。当我在部署配置中取消选中“作为 32 位进程运行”时,SFC 在系统帐户的上下文中正常工作。
关于windows - 从通过 SCCM 部署的 Powershell 脚本中运行 SFC.EXE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44953872/