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

使用 Microsoft Intune 管理扩展在 Intune 中上传 PowerShell 脚本。 然后,在 Windows 设备上运行这些脚本。 管理扩展增强了 MDM,并使其更易于迁移到新式管理。

注意

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

开始之前

  • 默认情况下,设置为具有管理员权限的用户上下文的脚本在管理员权限下运行 PowerShell。

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

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

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

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

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

重要

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

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

有关相关信息,请参阅 补救措施。

先决条件

重要

如果设备的系统时钟数月或数年严重失效,则部署到运行 Intune 管理扩展的客户端的脚本将无法运行。 系统时钟更新到最新后,脚本将按预期运行。

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

  1. 登录到 Microsoft Intune 管理中心

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

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

  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 了解更多信息。

    添加作用域标记:

    • 选择 选择范围标记> 从列表中>选择现有范围标记 选择

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

  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 脚本”中,选择要监视的脚本并选择“监视”,然后选择以下报表之一:

  • 设备状态
  • 用户状态

注意

从平台脚本的 Intune 管理中心导出设备状态现在使用 Intune 导出 API,CSV 列名与 API 架构一致。

删除脚本

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

常见问题和解决方法

问题:PowerShell 脚本无法运行

可能的解决方法

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

    • 在向设备分配脚本时

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

      提示

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

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

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

  • 脚本不会在处于 S 模式的 Surface Hub 或 Windows 上运行。

  • 检查日志是否存在任何错误。 请参阅(本文中的)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 检测到在下一次输入法检查 (通常每 8 小时) 一次 Windows 未受管理,并取消脚本运行。 在此期间,任何本地存储的脚本都可以运行。 当 IME 无法检查入时,它会重试签入,最长 (设备唤醒时间) 24 小时,然后从 Windows 设备中删除自身。

后续步骤

配置文件的监视故障排除