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

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

注意

有关适用于 Windows 的 Intune 管理扩展的信息,请参阅适用于 Windows 的 Intune 管理扩展

准备工作

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

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

  • 每次重新启动后,Intune管理扩展都会检查是否有任何新脚本或更改。 将策略分配给Microsoft Entra组后,PowerShell 脚本将运行,并报告运行结果。 脚本执行后,除非脚本或策略发生更改,否则不会再次执行。 如果脚本失败,Intune管理扩展将连续三次重试该脚本Intune管理扩展检查。

  • 分配给设备的 PowerShell 脚本将针对每个登录的新用户运行,但在禁用用户检查的多会话 SKU 上除外。

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

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

重要

使用 PowerShell 脚本和修正脚本时的隐私意识最佳做法包括:

  • 请勿在脚本中包含任何类型的敏感信息 (,例如密码)
  • 请勿在脚本中包含个人身份信息 (PII)
  • 不要使用脚本从设备收集 PII
  • 始终遵循隐私最佳做法

有关相关信息,请参阅 修正

先决条件

  • Intune管理扩展会在将 PowerShell 脚本应用分配给用户或设备时自动安装。 有关详细信息,请参阅 windows Intune管理扩展

重要

如果设备的系统时钟超出日期 (月或年),则部署到运行 Intune 管理扩展客户端的脚本将无法运行。 系统时钟更新后,脚本将按预期运行。

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

  1. 登录到 Microsoft Intune 管理中心

  2. 选择“设备>脚本”和“修正>平台脚本>”“添加>Windows 10及更高版本”。

    显示为 Windows 10 设备创建新脚本的屏幕截图。

  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) 和作用域标记

    添加作用域标记:

    • 选择“选择范围标记>”,从“选择”列表中选择>现有的范围标记。

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

  6. 选择“分配”> 选择要包含的组。 将显示Microsoft Entra组的现有列表。

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

      注意

      Intune中的 PowerShell 脚本可以面向Microsoft Entra设备安全组或Microsoft Entra用户安全组。 但是,当将加入工作区 (WPJ) 设备时,只能使用Microsoft Entra设备安全组, (用户目标将忽略) 。

    • 选择 下一步

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

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

方案 - 无法运行脚本

上午 8 点

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

上午 9 点

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

上午 10 点

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

上午 11 点

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

中午 12 点

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

监视运行状态

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

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

  • 设备状态
  • 用户状态

删除脚本

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

常见问题和解决方法

问题:PowerShell 脚本未运行

可能的解决方法

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

    • 在向设备分配脚本时

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

      提示

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

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

  • 确认 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
      

问题:为什么脚本在 Windows 不再托管的情况下运行?

不再管理具有已分配脚本的 Windows 设备时,不会立即删除 IME。 IME 检测到 Windows 在下一个 IME 检查 (通常每隔 8 小时) 管理一次,并取消脚本运行。 在此期间,任何本地存储的脚本都可能运行。 当 IME 无法检查时,它会) 设备唤醒时间 (最多 24 小时重试签入,然后从 Windows 设备中删除自身。

后续步骤

配置文件的监视故障排除