Как запустить 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 без ошибок:

NSudoLC.exe -U:T -P:E $pwsh -file $home\desktop\tisvc.txt

При использовании NSudoобоих вариантов указанные выше ошибки не возникают.

Связанный контент