我目前正在编写一个脚本,可以一次性完成对我的 Windows 10 20H2 操作系统的所有破解操作。
我正在使用 PowerShell 7.0.4 x64,我想在管理员权限下运行该脚本pwsh
,我发现一些注册表项需要更改 TrustedInstaller 权限,我找到了一个解决方案:使用psexec -S
启动一个pwsh
进程来以特权运行命令TrustedInstaller
,不幸的是我不知道如何将变量传递给新进程,并使其自动退出psexec
以继续执行脚本。
我将以此为例:
$TiSvc=@(
"PrintWorkflowUserSvc"
"RmSvc"
"SCardSvr"
"SecurityHealthService"
"Sense"
"SgrmBroker"
"wscsvc"
)
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
如果没有TrustedInstaller
权限,命令将失败并出现访问被拒绝错误。
现在,为了解决这个问题,请使用psexec
运行命令(我已将SysInternals
文件夹放入path
):
$PwSh=(Get-Process -Id $pid).path
PsExec -S $PwSh ???
我想在当前会话中设置[array]
变量$TiSvc
,我不知道如何传递$TiSvc
给新pwsh
会话并运行此命令:
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
并且命令执行结束后,退出新的pwsh
会话并退出psexec
继续脚本执行;
我该怎么做?任何帮助我都感激不尽。
答案1
将您想要运行的任何命令放在TrustedInstaller
与脚本文件相同路径的文本文件中,确保PsExec.exe
在中Path
,然后使用这些命令:
$PwSh=(Get-Process -Id $pid).path
psexec -S $pwsh -file $psscriptroot\tiworker.txt
在另一个进程中运行需要TrustedInstaller权限的命令PowerShell
,执行完成后该进程会自动退出,让主脚本继续执行。
修复了导致 PowerShell 进程在没有 TrustedInstaller 权限的情况下启动的一个小错误。
上述方法不知何故无法正常工作,因为当我尝试运行以下命令时:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WinDefend" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdBoot" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdFilter" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdNisDrv" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdNisSvc" -Name "Start" -Type DWord -Value 4
我收到错误:
Set-ItemProperty: Attempted to perform an unauthorized operation.
如果我使用reg add
ERROR: Access is denied.
然而,它们面前的命令全部返回:
The operation completed successfully.
具体来说这些命令:
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "DisableAntiSpyware" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "DisableRoutinelyTakingAction" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "ProductStatus" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Real-Time Protection" -Name "DisableAntiSpywareRealtimeProtection" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Real-Time Protection" -Name "DisableRealtimeMonitoring" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Scan" -Name "AutomaticallyCleanAfterScan" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Scan" -Name "ScheduleDay" -Type DWord -Value 8
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\UX Configuration" -Name "AllowNonAdminFunctionality" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\UX Configuration" -Name "DisablePrivacyMode" -Type DWord -Value 1
以管理员身份而不是 TrustedInstaller 运行时,每个都会返回此错误:
Set-ItemProperty: Requested registry access is not allowed.
当使用运行时PsExec
,不会产生此错误。
但是这个错误:
Set-ItemProperty: Attempted to perform an unauthorized operation.
仍會生成。
我猜这是因为PsExec
依赖于远程的东西,并且我已经禁用“远程协助”、“远程桌面”和“远程注册表”;
我使用NSudoLC.exe
它并成功禁用了 Windows Defender,并且没有出现错误:
NSudoLC.exe -U:T -P:E $pwsh -file $home\desktop\tisvc.txt
当同时使用NSudo
两者时,不会产生上述错误。