Actualmente estoy trabajando en un script que realiza todos los trucos en mi sistema operativo Windows 10 20H2 de una sola vez.
Estoy usando PowerShell 7.0.4 x64, quiero ejecutar el script en Admin pwsh
, encontré que algunas claves de registro requieren que se cambien los privilegios de TrustedInstaller, encontré una solución: usar psexec -S
para iniciar un pwsh
proceso para ejecutar los comandos con TrustedInstaller
privilegios, desafortunadamente No sé cómo pasar variables a nuevos procesos y hacer que salga automáticamente psexec
para continuar con la ejecución del script.
Usaré esto como ejemplo:
$TiSvc=@(
"PrintWorkflowUserSvc"
"RmSvc"
"SCardSvr"
"SecurityHealthService"
"Sense"
"SgrmBroker"
"wscsvc"
)
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
Sin TrustedInstaller
privilegios, el comando fallará con un error de acceso denegado.
Ahora, para resolver esto, use psexec
para ejecutar el comando (he puesto SysInternals
la carpeta en path
):
$PwSh=(Get-Process -Id $pid).path
PsExec -S $PwSh ???
Quiero configurar la [array]
variable $TiSvc
en la sesión actual, no sé cómo pasar $TiSvc
a la nueva pwsh
sesión y ejecutar este comando:
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
Y después de ejecutar el comando, salga de la nueva pwsh
sesión y salga psexec
para continuar con la ejecución del script;
¿Cómo puedo hacer eso? Se agradece cualquier ayuda.
Respuesta1
Coloque los comandos que desee ejecutar TrustedInstaller
en un archivo de texto en la misma ruta que su archivo de secuencia de comandos, asegúrese de PsExec.exe
que esté en el archivo Path
y luego use estos comandos:
$PwSh=(Get-Process -Id $pid).path
psexec -S $pwsh -file $psscriptroot\tiworker.txt
Para ejecutar los comandos que necesitan el privilegio de TrustedInstaller en otro PowerShell
proceso, el proceso se cerrará automáticamente una vez completada la ejecución, lo que permitirá que continúe la ejecución del script principal.
Se corrigió un error menor que causaba que el proceso de PowerShell se iniciara sin el privilegio de TrustedInstaller.
El método anterior de alguna manera no funcionó correctamente, como cuando intenté ejecutar estos comandos:
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
Recibí el error:
Set-ItemProperty: Attempted to perform an unauthorized operation.
si usoreg add
ERROR: Access is denied.
Sin embargo, todos los comandos anteriores a ellos regresaron:
The operation completed successfully.
Específicamente estos comandos:
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
Cuando se ejecuta como Administrador y no como TrustedInstaller, cada uno devolverá este error:
Set-ItemProperty: Requested registry access is not allowed.
Cuando se ejecuta usando PsExec
, este error no se generará.
Pero este error:
Set-ItemProperty: Attempted to perform an unauthorized operation.
Todavía se generará.
Supongo que esto se debe a que PsExec
depende de cosas remotas y he desactivado "Asistencia remota", "Escritorio remoto" y "Registro remoto";
Utilicé NSudoLC.exe
y deshabilité con éxito Windows Defender sin errores:
NSudoLC.exe -U:T -P:E $pwsh -file $home\desktop\tisvc.txt
Al utilizar NSudo
ambos no se generan los errores mencionados anteriormente.