使用 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 管理扩展客户端的脚本将无法运行。 系统时钟更新后,脚本将按预期运行。
创建脚本策略并分配该策略
选择“设备>脚本”和“修正>平台脚本>”“添加>Windows 10及更高版本”。
在“基本信息”中,输入以下属性并选择“下一步”:
- 名称:输入 PowerShell 脚本的名称。
- 说明:输入 PowerShell 脚本的说明。 此设置是可选的,但建议进行。
在“脚本设置”中,输入以下属性并选择“下一步”:
脚本位置:浏览查找该 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 主机中运行。
选择“作用域标记”。 作用域标记是可选的。 有关详细信息,请参阅对分布式 IT 使用基于角色的访问控制 (RBAC) 和作用域标记。
添加作用域标记:
选择“选择范围标记>”,从“选择”列表中选择>现有的范围标记。
完成后,选择“下一步”。
选择“分配”> 选择要包含的组。 将显示Microsoft Entra组的现有列表。
选择一个或多个组,其中的用户的设备会接收该脚本。 选择“选择”。 你选择的组将显示在列表中,并将收到策略。
注意
Intune中的 PowerShell 脚本可以面向Microsoft Entra设备安全组或Microsoft Entra用户安全组。 但是,当将加入工作区 (WPJ) 设备时,只能使用Microsoft Entra设备安全组, (用户目标将忽略) 。
选择 下一步。
在“查看 + 添加”中,将显示你配置的设置的摘要。 选择“添加”以保存脚本。 选择“添加”后,策略将部署到你选择的组。
方案 - 无法运行脚本
上午 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 设备中删除自身。