代码之家  ›  专栏  ›  技术社区  ›  codewario

有没有办法确定Powershell中当前的引导阶段?

  •  1
  • codewario  · 技术社区  · 8 年前

    我需要确保可能在Windows引导阶段的早期执行的Powershell脚本等待 Winlogon Init Post Boot 阶段继续执行。有没有办法确定Powershell/中的当前引导阶段。网络?如有必要,可接受P/Invoke。

    1 回复  |  直到 8 年前
        1
  •  1
  •   iRon    8 年前

    不是这样,问题是整个引导过程是异步的。 您可以通过检查 winlogon.exe 或者即使至少有一个用户通过检查等方式登录 userinit.exe 已启动:

    Register-WmiEvent -Query SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName='userinit.exe'" -Action {...}
    

    但即使如此,也不意味着网络已经启动并运行,互联网或域名是可以访问的。这是因为自windows 7以来,Microsoft fast user logon 默认情况下启用(另请参见: Understand the Effect of Fast Logon Optimization and Fast Startup on Group Policy ). 先前的 网络连接已建立。。。

    因此,如果脚本依赖于域,则需要创建一个事件来捕获网络更改:

    Register-ObjectEvent ([System.Net.NetworkInformation.NetworkChange]) 'NetworkAddressChanged' -Action {...}
    

    然后ping到域以确认该域确实可用。。。

    结论

    您需要定义cmdlet的依赖项并相应地检查它们(或生成特定事件),而不是试图定义“当前引导阶段”。

    推荐文章