Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 从通过SCCM部署的Powershell脚本中运行SFC.EXE_Windows_Powershell_Sccm - Fatal编程技术网

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

Windows 从通过SCCM部署的Powershell脚本中运行SFC.EXE,windows,powershell,sccm,Windows,Powershell,Sccm,我正在尝试创建一个Powershell脚本,该脚本将部署到任何显示糟糕更新运行状况的节点,以自动化一些简单任务,而不必在用户工作日中断用户。如果从提升的PS提示符运行Powershell脚本,则该脚本工作正常。当同一脚本通过SCCM部署到测试机器时,它也可以正常运行,但有一个例外:它不会调用SFC.EXE/SCANNOW 我试过使用: Start-Process -FilePath "${env:Windir}\System32\SFC.EXE" -ArgumentList '/scannow'

我正在尝试创建一个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在系统上下文而不是用户上下文(甚至是提升的用户上下文,但系统应该比提升的会话更高)中运行程序/脚本


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

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

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

因此,这将是:


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

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

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

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