【问题标题】:Running SFC.EXE from within Powershell script deployed via SCCM从通过 SCCM 部署的 Powershell 脚本中运行 SFC.EXE
【发布时间】:2017-12-10 18:05:55
【问题描述】:

我正在尝试创建一个 Powershell 脚本,该脚本将部署到任何更新健康状况不佳的节点,以自动执行一些简单任务,而无需在工作日中断用户。如果从提升的 PS 提示符运行,Powershell 脚本可以完美运行。当通过 SCCM 将相同的脚本部署到测试机器时,它也可以正常运行,但有一个例外:它不会调用 SFC.EXE /SCANNOW

我尝试过使用:

Start-Process -FilePath "${env:Windir}\System32\SFC.EXE" -ArgumentList '/scannow' -Wait -NoNewWindow
Start-Process -FilePath "sfc.exe" -ArgumentList '/scannow' -Wait -NoNewWindow
Start-Process -FilePath "${env:Windir}\System32\SFC.EXE" -ArgumentList '/scannow' -RedirectStandardOutput "C:\SFC-Out.log" -RedirectStandardError "C:\SFC-Err.log" -Wait -NoNewWindow
& "sfc.exe" "/scannow"
Invoke-Command -ScriptBlock { sfc.exe /scannow }

同样,当从提升的 PS 提示符运行时,所有这些示例都完全按照预期工作,但从部署的 PowerShell 脚本运行时会失败。当我使用 -RedirectStandardOutput 时,我检查了文件 SFC-Out.log 并显示:

“Windows 资源保护无法启动修复服务”

我认为这是因为 SCCM 在 SYSTEM 上下文而不是用户上下文(甚至是提升的用户上下文,但 SYSTEM 应该高于提升的会话)中运行程序/脚本。

有没有办法做到这一点?抱歉,格式错误,这是我在此网站上的第一篇文章。

【问题讨论】:

  • 尝试将ProcessStartInfo.Verb 设置为RunAs。您可以使用此选项以管理员权限运行您的进程。很遗憾,您不能同时使用VerbRedirectStandardOutputsee
  • 那不会弹出一个窗口询问凭据吗?我可以不使用RedirectStandardOutput,无论如何这是一个故障排除步骤,以找出SFC 没有启动的原因。
  • 您可以将凭据设置为ProcessStartInfo.PasswordProcessStartInfo.UserName,因此它不会要求您提供凭据,但它可以要求您以管理员权限确认启动过程。如果你想在没有确认的情况下以管理员身份运行进程,你可以降低 UAC 权限
  • 我使用 psexec 使用系统帐户尝试了 sfc scannow 并且它可以正常工作,因此尽管使用了系统帐户,但总的来说它应该是可能的。有关此主题的其他一些帖子建议启用受信任的安装程序服务“net starttrustedinstaller”您是否已经尝试过?用户是否登录了您尝试过此操作的系统?
  • 我不认为降低 UAC 权限是正确的方法。是的,用户将登录到这些系统。我们的想法是在他们在办公室时运行这些常见的修复步骤来修复更新运行状况,而不必中断他们的一天并花费 30 多分钟来修复。感谢您提供有关它可能的信息,并确认这应该与系统帐户一起使用。在调用SFC /scannow 之前,我将编写启动受信任的安装程序服务的脚本,看看情况如何。谢谢!

标签: windows powershell sccm


【解决方案1】:

我一直在网上阅读和搜索这个,到目前为止唯一的答案是它无法运行,因为sccm使用系统帐户。尝试运行 winmgt 时也是同样的行为。

【讨论】:

    【解决方案2】:

    您所拥有的将起作用,只是缺少“-Verb RunAs”来提升权限。所以你的 cmdlet 应该是:-

    Start-Process -FilePath "${env:Windir}\System32\SFC.EXE" -ArgumentList '/scannow' -Wait -Verb RunAs
    

    【讨论】:

      【解决方案3】:

      我在 SCCM 中创建了一个包(不是应用程序),并且必须使用用于 x64 机器的难以捉摸的 sysnative 文件夹来使用重定向:

      https://www.thewindowsclub.com/sysnative-folder-in-windows-64-bit

      原来是这样:

      C:\Windows\Sysnative\SFC.EXE /SCANNOW

      【讨论】:

        【解决方案4】:

        有点晚了,但我遇到了同样的问题。不确定您是否属于这种情况,但原因是使用 SCCM 配置脚本部署以作为 32 位进程运行。该脚本被部署到 64 位系统。当我在部署配置中取消选中“以 32 位进程运行”时,SFC 在系统帐户的上下文中正常工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-23
          相关资源
          最近更新 更多