如何启动 PowerShell 运行命令并将变量传递给新进程?

如何启动 PowerShell 运行命令并将变量传递给新进程?

我目前正在编写一个脚本,可以一次性完成对我的 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两者时,不会产生上述错误。

相关内容