В настоящее время я работаю над скриптом, который выполнит все мои действия с моей ОС 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
обоих вариантов указанные выше ошибки не возникают.