如何在运行 powershell 进程时阻止 Windows 10 计算机进入睡眠/休眠状态?

2023-12-25

我有一个 powershell 进程,它从远程服务器读取记录并将其复制到本地数据库中。运行时,可能会运行 8-12 小时。

如何防止计算机在此期间关闭(或进入睡眠/休眠模式)?我知道我可以调整“电源和睡眠设置”以将计算机设置为从不睡眠,但这不是我想要的 - 我do希望它在进程时进入睡眠状态isn't跑步。

我知道如果 netflix 或 youtube 视频正在运行,睡眠/休眠会被暂停,我希望计算机在 powershell 进程运行时执行相同的操作。

powershell进程在桌面上的命令窗口中运行 - 我很高兴屏幕保护程序能够激活,但我不希望发生的是我在8小时后唤醒机器并发现该进程只运行了电脑进入睡眠状态前10分钟!


通过一些额外的努力,您可以通过以下方式实现所需的行为标准powercfg.exe utility https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/powercfg-command-line-options,通过使用定制、始终开启的电源方案它是按需创建的,并在脚本运行期间临时激活:

Note:

  • 寻找评论# YOUR CODE GOES HERE below.

  • For a 基于 .NET / Windows API 的替代方案, see 这个答案 https://stackoverflow.com/a/65162017/45375.

# Define the properties of a custom power scheme, to be created on demand.
$schemeGuid = 'e03c2dc5-fac9-4f5d-9948-0a2fb9009d67' # randomly created with New-Guid
$schemeName = 'Always on'
$schemeDescr = 'Custom power scheme to keep the system awake indefinitely.'

# Helper function that ensures that the most recent powercfg.exe call succeeded.
function assert-ok { if ($LASTEXITCODE -ne 0) { throw } }

# Determine the currently active power scheme, so it can be restored at the end.
$prevGuid = (powercfg -getactivescheme) -replace '^.+([-0-9a-f]{36}).+$', '$1'
assert-ok

# Temporarily activate a custom always-on power scheme; create it on demand.
try {

  # Try to change to the custom scheme.
  powercfg -setactive $schemeGuid 2>$null
  if ($LASTEXITCODE -ne 0) { # Changing failed -> create the scheme on demand.
    # Clone the 'High performance' scheme.
    $null = powercfg -duplicatescheme SCHEME_MIN $schemeGuid
    assert-ok
    # Change its name and description.
    $null = powercfg -changename $schemeGuid $schemeName $schemeDescr
    # Activate it
    $null = powercfg -setactive $schemeGuid
    assert-ok
    # Change all settings to be always on.
    # Note: 
    #   * Remove 'monitor-timeout-ac', 'monitor-timeout-dc' if it's OK
    #     for the *display* to go to sleep.
    #   * If you make changes here, you'll have to run powercfg -delete $schemeGuid 
    #     or delete the 'Always on' scheme via the GUI for changes to take effect.
    #   * On an AC-only machine (desktop, server) the *-ac settings aren't needed.
    $settings = 'monitor-timeout-ac', 'monitor-timeout-dc', 'disk-timeout-ac', 'disk-timeout-dc', 'standby-timeout-ac', 'standby-timeout-dc', 'hibernate-timeout-ac', 'hibernate-timeout-dc'
    foreach ($setting in $settings) {
      powercfg -change $setting 0 # 0 == Never
      assert-ok
    }
  }
  
  # YOUR CODE GOES HERE.
  # In this sample, wait for the user to press Enter before exiting.
  # Before that, the 'Always on' power scheme should remain in
  # effect, and the machine shouldn't go to sleep.
  pause

} finally { # Executes even when the script is aborted with Ctrl-C.
  # Reactivate the previously active power scheme.
  powercfg -setactive $prevGuid
}

你可以创建一个wrapper上面的脚本,您可以将要执行的脚本的路径传递给该脚本。


如果您不介意修改目前活跃 scheme,您可以使用中所示的方法克尔的回答 https://stackoverflow.com/users/3996028/kerr,使用每个设置powercfg -change <setting> <value-in-minutes> calls (/x / -x是一个别名/change / -change),使用以下之一<setting>每次通话中的姓名;通过0 as <value-in-minutes>代表never:

  • monitor-timeout-ac
  • monitor-timeout-dc
  • disk-timeout-ac
  • disk-timeout-dc
  • standby-timeout-ac
  • standby-timeout-dc
  • hibernate-timeout-ac
  • hibernate-timeout-dc

但请注意,这些变化是执着的, so 你可能想要restore稍后的原始值,这需要额外的努力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行 powershell 进程时阻止 Windows 10 计算机进入睡眠/休眠状态? 的相关文章

  • powershell 优雅/干净地关闭 Internet Explorer

    我想干净 优雅地关闭互联网浏览器 taskkill 会关闭它 但是当重新打开它时 它会询问您是否要重新打开上一个会话 尝试 CloseMainWindow 方法 通过向其主窗口发送关闭消息来关闭具有用户界面的进程 Get Process i
  • Powershell Core 6 中的 HtmlWebResponseObject.ParsedHtml 替换

    我的目标是解析检索到的 html 文件Invoke WebRequest 如果可能的话 我想避免任何外部库 我面临的问题是Invoke WebRequest返回一个BasicHtmlWebResponseObject代替HtmlWebRes
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 一行 PowerShell 脚本

    我创建了这个基本的单行 PowerShell 脚本 如果我运行以下命令 该脚本就会执行adAD 的 cmdlet 然后是查询的其余部分 但是尝试将它们一起运行时 它似乎只加载了 cmdlet 而没有执行 cmd 的其余部分 powershe
  • 如何扩展和重写集合类中的 Add

    背景 我在 PowerShell 中有一个具有 4 个属性的数据对象 其中 3 个是字符串 第 4 个是哈希表 我想安排一个新类型 将其定义为该数据对象的集合 在这个集合类中 我希望强制执行一种特定的格式 这将使我在模块中其他地方的代码更加
  • 与 Write-Host 相比,Write-Output 的使用非常不可靠

    有人指出一个问题 如果我希望命令按顺序操作 建议使用 Write Output 而不是 Write Host 因为 Write Host 不会将输出放在管道上 而其他命令却这样做 这意味着 Write Host 输出可以发生在管道上的其他命
  • 在远程桌面上使用 Powershell 获取 Windows DisplayLanguage

    我正在尝试通过 powershell 获取 Windows 显示语言设置远程计算机 我尝试了 Get WinUserLanguageList 但这会返回所有语言的列表 Get WinSystemLocale 和 Get Culture 也不
  • Powershell Invoke-Command 远程手动工作,但不能通过 Jenkins

    我遇到了一个非常奇怪的情况 即从 Windows Server 2012 R2 手动运行相同的命令时可以工作 但从同一服务器上运行的 Jenkins 从属进程无法工作 首先 手动运行的输出 管理 PowerShell 窗口 PS C Use
  • PowerShell 模块中忽略 Write-Verbose

    我希望使用Write Verbose脚本和函数中的命令行开关 它在脚本 ps1 文件中按预期工作 但在模块 psm1 文件中则不然 该 commandlet 在模块中被忽略 运行以下脚本 PS gt scaffold ps1 verbose
  • 在 powershell 脚本中以不同用户身份本地运行代码块

    这是非常简单的事情 但我就是无法让任何东西发挥作用 我想在特定用户下的 powershell 脚本中运行块代码 关键字是locally我正在使用 powershell 2 0 Invoke Command 似乎需要远程主机 我运行以下命令
  • Powershell tail 多个文件命令

    我可以通过以下命令尾随一个文件 Get Content Path C log1 txt Tail 10 Wait 如何将其扩展到多个文件 我尝试了以下方法但没有成功 Get Content Path C log1 txt C log2 tx
  • 尝试在 powershell 5.1 中使用here-strings 但不起作用

    当我尝试在 PS 5 1 中使用此处字符串时 出现红色曲线 我缺少什么 function Main csv test1 test2 echo csv Main Error White space is not allowed before
  • 如何使用 .NET 4 运行时运行 PowerShell?

    我正在更新管理一些 NET 程序集的 PowerShell 脚本 该脚本是为针对 NET 2 与 PowerShell 运行的框架版本相同 构建的程序集编写的 但现在需要使用 NET 4 程序集以及 NET 2 程序集 由于 NET 4 支
  • 将变量传递给 Start-Job

    我必须在这里遗漏一些非常简单的东西 这是一个非常基本的脚本来说明我正在尝试的内容 Computers comp1 comp2 ScriptBlock New Item C Temp C txt Force Foreach C in Comp
  • 导入模块 WebAdministration 不会从脚本加载,但会从命令行加载

    我正在进行一个使用的项目PowerShell编写构建脚本 该构建利用了WebAdministration模块来管理本地 IIS 实例 当我运行构建脚本时 尝试导入时会引发以下错误WebAdministration 错误 06 29 2016
  • 如何在管道函数中使用 Write-Progress?

    我正在尝试编写一个函数PowerShell接受管道输入 我想使用显示进度条Write Progress 管道中每个项目的增量 例如 function Write PipelineProgress Cmdletbinding Param Pa
  • Import-Csv - 成员已存在问题

    我必须将多个 CSV 文件合并为一个文件 每个 CSV 都有一个标题 其中一列标题是相同的 理想情况下 最终文件 all out csv 必须有一个标头 我运行 PowerShell 代码 Import Csv out 1 result c
  • 有没有办法在 MS Windows(Powershell 或 CMD)的 ripgrep 中转义引号?

    我想找一个字符串 Hello Hello 以双引号开头 在文本文件中使用ripgrep 通常 在 Bash 或 ZSH 中 这可以通过用反斜杠转义或用单引号括起来来实现 rg Hello rg Hello 然而 在 MS Windows P
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que

随机推荐