繁体   English   中英

从通过 SCCM 部署的 Powershell 脚本中运行 SFC.EXE

[英]Running SFC.EXE from within Powershell script deployed via SCCM

我正在尝试创建一个 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 应该高于提升的会话)中运行程序/脚本。

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

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

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

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

所以它会是:

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

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

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

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

快进到 SCCM Current Branch 2109,我能够通过使用 SCCM 中内置的新脚本功能来解决这个问题。 使用& 'sfc.exe' '/scannow'有效,我可以手动运行此脚本,以针对任何显示设备错误的设备集合。 Start-Process -FilePath "sfc.exe" -ArgumentList "/scannow" -NoNewWindow -Wait也可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM