我正在嘗試創建一個Powershell腳本,該腳本將部署到任何正在顯示不良更新運行狀況的節點,以自動執行一些簡單任務,而不必在其中斷用戶工作日。如果從提升的PS提示符運行,Powershell腳本完美地工作。當通過SCCM將相同的腳本部署到測試機器時,它也可以正常運行,但有一個例外:它不會調用SFC.EXE /SCANNOW
。從通過SCCM部署的Powershell腳本中運行SFC.EXE
我已經嘗試使用:
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'。您可以使用此選項以管理員權限運行您的過程。不幸的是,你不能一起使用'Verb'和'RedirectStandardOutput',[見](https://stackoverflow.com/a/3596354) –
那不是彈出一個窗口詢問憑據嗎?我沒有使用'RedirectStandardOutput'就好了,無論如何,這是一個故障排除步驟,以找出爲什麼'SFC'沒有啓動。 –
您可以將憑證設置爲'ProcessStartInfo.Password'和'ProcessStartInfo.UserName',所以它不會要求您提供憑證,但它可以要求您使用管理員權限確認啓動過程。如果你想以管理員的身份運行進程但不確認你可以降低UAC權限 –