O PC não dorme / acorda após executar o script

1

Fiquei farto do meu PC acordar do sono aparentemente em intervalos aleatórios e fiz todas as coisas usuais, desativando temporizadores, agendas de tarefas, proibindo a LAN e outros dispositivos, executando o powercfg / sleepstudy etc. sem sucesso.

Encontrei alguns scripts para desativar todos os timers de ativação e executei isso:

Get-ScheduledTask | ? { $_.Settings.WakeToRun -eq $true -and $_.State -ne "Disabled"} | % { $_.Settings.WakeToRun = $false; Set-ScheduledTask $_ }

Infelizmente, também executei um script para proibir qualquer dispositivo de ativar o PC que parece interromper o comando de suspensão até pressionar uma tecla e depois o desliga completamente:

(/F "tokens=*" %A in ('powercfg -devicequery wake_armed') do powercfg -devicedisablewake "%A"

Isso produz vários erros.

Embora eu possa entender muito disso, não tenho as habilidades de programação para escrever um script para corrigi-lo :-(

Alguém aqui pode ajudar? (não é possível restaurar uma imagem do sistema no momento - emprestei minha unidade de backup + caddy a um amigo que está fora) (OK - sou um Muppett)

EDIT: OK - eu executei o
PS C: \ WINDOWS \ system32> @echo off

para / F "tokens = *" %% A em ('powercfg -devicequery wake_armed') do (powercfg -devicedisablewake "%% A")
que deu um erro de falta '(' after keyword 'for'. Então, eu coloque um em:
PS C: \ WINDOWS \ system32> @echo desativado para (/ F "tokens = *" %% A em ('powercfg -devicequery wake_armed') do (powercfg -devicequery wake_armed ') do (powercfg -devicedisablewake "%% A").
Isso aparece ter funcionado, embora eu ainda não entenda o porquê, porque parece haver um '(' muitos .

EDIT 2 Existe uma maneira de reverter isso? Posso apenas substituir -devicedisableawake por - deviceenablewake ?

birchyboy
fonte
2
Quais são os "vários erros" que produz?
Mokubai
@Mokubai do was unexpected at this time.:)
DavidPostill
Um erro foi "F: o termo '/ F' não é reconhecido como o nome de um cmdlet, função, arquivo de script ou programa operável". Além disso, o script original não tinha (no início. O administrador do Windows Powershell disse que estava faltando (no início do script, eu não o segui porque) (o tornou desequilibrado. Coloquei um e o script foi executado sem um erro - estranho.
birchyboy 19/02
Outro erro foi - O operador de splatting '@' não pode ser usado para fazer referência a variáveis ​​em uma expressão. '@echo' pode ser usado apenas como argumento para um comando. Para fazer referência a variáveis ​​em uma expressão, use '$ echo'.
birchyboy

Respostas:

0

Isso produz vários erros.

Vamos consertar passo a passo.

> (/F "tokens=*" %A in ('powercfg -devicequery wake_armed') do powercfg -devicedisablewake "%A"
do was unexpected at this time.

O primeiro (não deveria estar lá.

> /F "tokens=*" %A in ('powercfg -devicequery wake_armed') do powercfg -devicedisablewake "%A"
'/F' is not recognized as an internal or external command,
operable program or batch file.

Há uma falta forno início.

Na linha de comando, ele avaliará apenas o primeiro resultado, portanto, você precisa usar um arquivo em lotes.

Os %precisam ser substituídos por %%s em um arquivo em lotes.

Use o seguinte arquivo em lotes:

@echo off
for /F "tokens=*" %%A in ('powercfg -devicequery wake_armed') do (
  powercfg -devicedisablewake "%%A"
  )

Leitura adicional

DavidPostill
fonte