¿Cómo iniciar PowerShell para ejecutar un comando y pasar una variable al nuevo proceso?

¿Cómo iniciar PowerShell para ejecutar un comando y pasar una variable al nuevo proceso?

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 -Spara iniciar un pwshproceso para ejecutar los comandos con TrustedInstallerprivilegios, desafortunadamente No sé cómo pasar variables a nuevos procesos y hacer que salga automáticamente psexecpara 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 TrustedInstallerprivilegios, el comando fallará con un error de acceso denegado.

Ahora, para resolver esto, use psexecpara ejecutar el comando (he puesto SysInternalsla carpeta en path):

$PwSh=(Get-Process -Id $pid).path
PsExec -S $PwSh ???

Quiero configurar la [array]variable $TiSvcen la sesión actual, no sé cómo pasar $TiSvca la nueva pwshsesió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 pwshsesión y salga psexecpara continuar con la ejecución del script;

¿Cómo puedo hacer eso? Se agradece cualquier ayuda.

Respuesta1

Coloque los comandos que desee ejecutar TrustedInstalleren un archivo de texto en la misma ruta que su archivo de secuencia de comandos, asegúrese de PsExec.exeque esté en el archivo Pathy 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 PowerShellproceso, 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 PsExecdepende de cosas remotas y he desactivado "Asistencia remota", "Escritorio remoto" y "Registro remoto";

Utilicé NSudoLC.exey deshabilité con éxito Windows Defender sin errores:

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

Al utilizar NSudoambos no se generan los errores mencionados anteriormente.

información relacionada