在 Intune 中的 Windows 10 设备上使用 PowerShell 脚本

使用 Microsoft Intune 管理扩展在 Intune 中上传 PowerShell 脚本。 然后,在 Windows 10 设备上运行这些脚本。 管理扩展增强了 Windows 设备管理 (MDM),以便更轻松地采用新式管理。

此功能适用于:

  • Windows 10 及更高版本(Windows 10 家庭版除外)

备注

只要满足 Intune 管理扩展先决条件,如果 PowerShell 脚本或 Win32 应用分配给用户或设备,Intune 管理扩展就会自动安装。 有关详细信息,请参阅 Intune 管理扩展先决条件

“工作区加入”(WPJ) 设备上不正式支持的 PowerShell 脚本可部署到 WPJ 设备。 具体而言,设备上下文 PowerShell 脚本可在 WPJ 设备上运行,但用户上下文 PowerShell 脚本因自身性质而会被忽略。 用户上下文脚本将在 WPJ 设备上被忽略,并且不会报告给 Microsoft Endpoint Manager 控制台。

迁移到新式管理

最终用户的计算系统正在向数字化转型。 传统的 IT 侧重于单个设备平台、企业拥有的设备、在办公室办公的用户,以及不同的手动、反应式 IT 过程。 现代工作区使用由用户和业务拥有的许多平台。 这样使用户能够在任何位置工作,并提供自动化和主动的 IT 过程。

Microsoft Intune 等 MDM 服务可以管理运行 Windows 10 的移动和桌面设备。 Windows 10 内置管理客户端可与 Intune 进行通信,以运行企业管理任务。 你可能需要执行一些任务,例如高级设备配置和故障排除。 对于 Win32 应用管理,可以在 Windows 10 设备上使用 Win32 应用管理功能。

Intune 管理扩展对 Windows 10 MDM 内置功能进行了补充。 可创建在 Windows 10 设备上运行的 PowerShell 脚本。 例如,创建执行高级设备配置的 PowerShell 脚本。 然后,将脚本上传到 Intune,将脚本分配到 Azure Active Directory (AD) 组并运行该脚本。 然后,可全程监视脚本运行状态。

开始之前

  • 将脚本设置为用户上下文且最终用户拥有管理员权限时,默认情况下将在管理员权限下运行 PowerShell 脚本。

  • 最终用户无需登录设备即可执行 PowerShell 脚本。

  • Intune 管理扩展代理每小时且每次重启后都会与 Intune 核对一次,以确定是否有任何新脚本或更改。 将策略分配给 Azure AD 组后,PowerShell 脚本将运行,还将报告运行结果。 脚本执行后,除非脚本或策略发生更改,否则不会再次执行。 如果脚本失败,Intune 管理扩展代理会尝试在接下来的连续三次 Intune 管理扩展代理签入中重试脚本三次。

  • 对于共享设备,将为每位登录的新用户运行 PowerShell 脚本。

  • PowerShell 脚本会在 Win32 应用运行之前执行。 换言之,将首先执行 PowerShell 脚本。 然后,执行 Win32 应用。

  • PowerShell 脚本在 30 分钟后超时。

必备条件

Intune 管理扩展具有以下先决条件。 满足先决条件后,在向用户或设备分配 PowerShell 脚本或 Win32 应用时,系统将自动安装 Intune 管理扩展。

  • 运行 Windows 10 版本 1607 或更高版本的设备。 如果设备是通过批量自动注册进行注册的,设备必须运行 Windows 10 版本 1709 或更高版本。 Windows 10 上的 S 模式不支持 Intune 管理扩展,因为该模式禁止运行非存储应用。

  • 加入 Azure Active Directory (AD) 的设备,其中包括:

  • 已注册 Azure AD/已加入工作区 (WPJ):在 Azure Active Directory (AAD) 中注册的设备,请参阅 Workplace Join 作为无缝第二重身份验证获取详细信息。 通常,这些是自带设备 (BYOD) 设备,这些设备通过“设置”>“帐户”>“访问工作或学校”添加工作或学校帐户。

  • 在 Intune 中注册的设备,其中包括:

    • 在组策略 (GPO) 中注册的设备。 相关指南请参阅通过组策略自动注册 Windows 10 设备

    • 在 Intune 中手动注册的设备,即在下述情况下注册的设备:

      • Azure AD 中已启用自动注册到 Intune。 用户使用本地用户帐户登录设备,并手动将设备加入 Azure AD。 然后,他们使用其 Azure AD 帐户登录到设备。

      要么

      • 用户使用其 Azure AD 帐户登录设备,然后在 Intune 中进行注册。
    • 使用 Configuration Manager 和 Intune 的共同托管设备。 安装 Win32 应用时,请确保将“应用”工作负载设置为“试点 Intune”或“Intune”。 即使将“应用”工作负载设置为“Configuration Manager”,也会运行 PowerShell 脚本。 将 PowerShell 脚本面向设备时,Intune 管理扩展将部署到设备。 请记住,设备必须是加入了 Azure AD 或混合 Azure AD 的设备。 此外,还必须运行 Windows 10 版本 1607 或更高版本。 若要获取指南,请参阅下列文章:

备注

要了解如何使用 Window 10 虚拟机,请参阅将 Windows 10 虚拟机与 Intune 配合使用

创建脚本策略并分配该策略

  1. 登录到 Microsoft 终结点管理器管理中心

  2. 选择“设备” > “PowerShell 脚本” > “添加”。

    在 Microsoft Intune 中添加和使用 PowerShell 脚本

  3. 在“基本信息”中,输入以下属性并选择“下一步” :

    • 名称:输入 PowerShell 脚本的名称。
    • 描述:输入 PowerShell 脚本的说明。 此设置是可选的,但建议进行。
  4. 在“脚本设置”中,输入以下属性并选择“下一步” :

    • 脚本位置:浏览 PowerShell 脚本。 脚本必须小于 200 KB (ASCII)。

    • 使用登录凭据运行此脚本:选择“是”,可以使用设备上的用户凭据运行脚本。 选择“否”(默认值),在系统上下文中运行该脚本。 许多管理员选择“是”。 如果脚本必须在系统上下文中运行,请选择“否”。

    • 强制执行脚本签名检查:如果脚本必须由受信任的发布者签名,请选择“是”。 如果不需要对脚本进行签名,请选择“否”(默认)。

    • 在 64 位 PowerShell 主机中运行脚本:选择 ,可以在 64 位客户端体系结构上的 64 位 PowerShell (PS) 主机中运行脚本。 选择“否”(默认),在 32 位 PowerShell 主机中运行脚本。

      设置为“是”或“否”时,请对新策略行为和现有策略行为使用下表 :

      在 64 位 PS 主机中运行脚本 客户端体系结构 新脚本 现有的策略脚本
      32 位 支持 32 位 PowerShell 主机 仅在 32 位 PowerShell 主机中运行,该主机适用于 32 位和 64 位体系结构。
      64 位 在适用于 64 位体系结构的 64 位 PowerShell 主机中运行脚本。 在 32 位上运行时,脚本在 32 位 PowerShell 主机中运行。 在 32 位 PowerShell 主机中运行脚本。 如果此设置更改为 64 位,则脚本将在 64 位 PowerShell 主机中打开(它不会运行),并报告结果。 在 32 位上运行时,脚本在 32 位 PowerShell 主机中运行。
  5. 选择“作用域标记”。 作用域标记是可选的。 有关详细信息,请参阅对分布式 IT 使用基于角色的访问控制 (RBAC) 和作用域标记

    添加作用域标记:

    1. 选择“选择作用域标记”,然后从列表中选择现有作用域标记,然后选择“选择” 。

    2. 完成后,选择“下一步”。

  6. 选择“分配” > 选择要包含的组 。 随即显示 Azure AD 组的现有列表。

    1. 选择一个或多个组,其中的用户的设备会接收该脚本。 选择“选择” 。 你选择的组将显示在列表中,并将收到策略。

      备注

      Intune 中的 PowerShell 脚本可定向于 Azure AD 设备安全组或 Azure AD 用户安全组。 但在面向工作区加入 (WPJ) 设备时,只能使用 Azure AD 设备安全组(将忽略用户目标)。 有关详细信息,请参阅工作区加入 (WPJ) 设备的 Win32 应用支持

    2. 选择“下一步”。

      将 PowerShell 脚本分配或部署到 Microsoft Intune 中的设备组

  7. 在“查看 + 添加”中,将显示你配置的设置的摘要。 选择“添加”以保存脚本。 选择“添加”后,策略将部署到你选择的组。

无法运行脚本示例

上午 8 点

  • 签入
  • 运行脚本 ConfigScript01
  • 脚本失败

上午 9 点

  • 签入
  • 运行脚本 ConfigScript01
  • 脚本失败(重试次数 = 1)

上午 10 点

  • 签入
  • 运行脚本 ConfigScript01
  • 脚本失败(重试次数 = 2)

上午 11 点

  • 签入
  • 运行脚本 ConfigScript01
  • 脚本失败(重试次数 = 3)

中午 12 点

  • 签入
  • 没有额外尝试运行 ConfigScript01 脚本。
  • 如果没有对脚本进行其他任何更改,则不会额外尝试运行脚本。

监视运行状态

可在门户中监视用户和设备的 PowerShell 脚本运行状态。

在“PowerShell 脚本”中,选择要监视的脚本并选择“监视”,然后选择以下报表之一 :

  • 设备状态
  • 用户状态

Intune 管理扩展日志

客户端计算机上的代理日志通常位于 \ProgramData\Microsoft\IntuneManagementExtension\Logs。 可以使用 CMTrace.exe 查看这些日志文件。

Microsoft Intune 中的屏幕截图或 cmtrace 代理日志示例

删除脚本

在“PowerShell 脚本”中,右键单击该脚本,然后选择“删除” 。

常见问题和解决方法

问题:未下载 Intune 管理扩展

可能的解决方法

  • 设备未加入 Azure AD。 请确保设备满足本文中的先决条件
  • 未向用户或设备所属的组分配任何 PowerShell 脚本或 Win32 应用。
  • 设备无法使用 Intune 服务签入。 例如,没有 Internet 访问权限,无法访问 Windows 推送通知服务 (WNS) 等。
  • 设备处于 S 模式下。 S 模式下运行的设备不支持 Intune 管理扩展。

要查看是否会自动注册设备,可执行以下操作:

  1. 转至“设置” > “帐户” > “访问工作或学校” 。
  2. 选择已加入的帐户 >“信息”。
  3. 在“高级诊断报告”下,选择“创建报表”。
  4. 在 Web 浏览器中,打开 MDMDiagReport
  5. 搜索 MDMDeviceWithAAD 属性。 如果存在此属性,则设备已自动注册。 如果没有此属性,则未自动注册设备。

启用 Windows 10 自动注册分步介绍了如何在 Intune 中配置自动注册功能。

问题:PowerShell 脚本未运行

可能的解决方法

  • PowerShell 脚本不会在每次登录时运行。 它们在下述情况下运行:

    • 在向设备分配脚本时

    • 如果更改了脚本,请将其上传,再将其分配给用户或设备

      提示

      Microsoft Intune 管理扩展是一项在设备上运行的服务,如同服务应用 (services.msc) 中列出中的任何其他服务一样。 设备重启后,此服务可能也会重启,并检查是否随附 Intune 服务分配了任何 PowerShell 脚本。 如果 Microsoft Intune 管理扩展服务设置为“手动”,则设备重启后可能不会重启此服务。

  • 确保设备已加入 Azure AD。 仅加入你的工作区或组织(在 Azure AD 中注册)的设备不会收到脚本。

  • Intune 管理扩展客户端每小时检查一次 Intune 中的脚本或策略是否发生任何更改。

  • 确认 Intune 管理扩展已下载到 %ProgramFiles(x86)%\Microsoft Intune Management Extension

  • 未在 Surface Hub 或 Windows 10 的 S 模式下运行的脚本。

  • 检查日志是否存在任何错误。 请参阅(本文中的)Intune 管理扩展日志

  • 对于可能的权限问题,确保将 PowerShell 脚本的属性设置为 Run this script using the logged on credentials。 另外,确保已登录的用户具有适当的权限来运行脚本。

  • 要隔离脚本问题,可以:

    • 检查设备上的 PowerShell 执行配置。 相关指南请参阅PowerShell 执行策略

    • 使用 Intune 管理扩展运行示例脚本。 例如,创建 C:\Scripts 目录,并为每个人提供完全控制权限。 运行以下脚本:

      write-output "Script worked" | out-file c:\Scripts\output.txt
      

      如果成功,应创建 output.txt,其中应包括“脚本已运行”文本。

    • 要在不使用 Intune 的情况下测试脚本执行,请在系统帐户中本地使用 psexec 工具来运行脚本:

      psexec -i -s

    • 如果脚本报告它成功,但实际上没有成功,那么防病毒服务可能是沙盒 AgentExecutor。 以下脚本始终在 Intune 中报告失败。 可以使用此脚本进行测试:

      Write-Error -Message "Forced Fail" -Category OperationStopped
      mkdir "c:\temp" 
      echo "Forced Fail" | out-file c:\temp\Fail.txt
      

      如果脚本报告成功,请查看 AgentExecutor.log 以确认错误输出。 如果脚本执行,则长度应为 >2。

    • 为捕获 .error.output 文件,以下代码片段会通过 AgentExecutor 将脚本执行到 PowerShell x86 (C:\Windows\SysWOW64\WindowsPowerShell\v1.0)。 它会保留日志以供查看。 请记住,Intune 管理扩展会在脚本执行后清除日志:

      $scriptPath = read-host "Enter the path to the script file to execute"
      $logFolder = read-host "Enter the path to a folder to output the logs to"
      $outputPath = $logFolder+"\output.output"
      $errorPath =  $logFolder+"\error.error"
      $timeoutPath =  $logFolder+"\timeout.timeout"
      $timeoutVal = 60000 
      $PSFolder = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0"
      $AgentExec = "C:\Program Files (x86)\Microsoft Intune Management Extension\agentexecutor.exe"
      &$AgentExec -powershell  $scriptPath $outputPath $errorPath $timeoutPath $timeoutVal $PSFolder 0 0
      

后续步骤

配置文件的监视故障排除