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

时间:2017-07-06 16:01:30

标签: windows powershell 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应该高于提升的会话)。

有没有办法实现这个目标?抱歉格式不正确,这是我在这个网站上的第一篇文章。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

因此它将是:

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

答案 2 :(得分:0)

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

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