如何将AnyDesk CMD脚本转换为可在Intune运行的PS1脚本?
将获取AnyDesk ID的CMD脚本转换为PowerShell并适配Intune运行的解决方案
先给你能直接用的PowerShell脚本,适配Intune运行场景,同时包含错误处理:
# 指定AnyDesk程序路径 $anyDeskExe = "C:\Program Files (x86)\AnyDeskMSI\AnyDeskMSI.exe" # 先检查程序是否存在,避免无意义执行 if (Test-Path -Path $anyDeskExe) { # 调用AnyDesk获取ID,清理输出内容 $anyDeskID = & $anyDeskExe --get-id | Out-String | Trim # 验证获取到的ID是否有效 if ($anyDeskID) { Write-Host "AnyDesk ID: $anyDeskID" # 在这里添加你的后续操作,比如: # 1. 将ID写入注册表供Intune收集 # Set-ItemProperty -Path "HKLM:\SOFTWARE\YourCompany\DeviceInfo" -Name "AnyDeskID" -Value $anyDeskID # 2. 将ID上传到你的管理平台API # Invoke-RestMethod -Uri "https://your-api-endpoint" -Method Post -Body @{DeviceID=$env:COMPUTERNAME; AnyDeskID=$anyDeskID} } else { Write-Error "获取AnyDesk ID失败,命令返回为空" exit 1 } } else { Write-Error "未找到AnyDesk程序,路径:$anyDeskExe" exit 1 }
转换失败的常见原因及解决思路
- 路径问题:原CMD脚本直接硬编码路径,但Intune部署的设备可能存在AnyDesk未安装、路径变更的情况,PowerShell里加入
Test-Path检查能提前定位问题。 - 输出处理不当:CMD用
for/f捕获输出,PowerShell中直接用&调用外部程序,再通过Out-String和Trim清理多余的换行、空格,确保ID是纯净的文本内容,避免后续操作出错。 - Intune运行环境限制:
- 执行策略:Intune运行脚本时,要在脚本配置里勾选"绕过执行策略",防止PowerShell阻止脚本运行。
- 权限:确保脚本以系统身份运行(Intune脚本默认选项),避免普通用户权限无法读取AnyDesk相关信息。
- 输出可见性:Intune中
Write-Host的内容不会在本地显示,如果你需要验证结果,可将ID写入注册表或本地日志文件,再通过Intune的硬件/软件清单收集。
- 错误处理缺失:原CMD脚本没有错误判断逻辑,PowerShell里加入存在性检查、非空验证,能快速定位是程序未安装还是ID获取失败。
内容的提问来源于stack exchange,提问作者Andrew Waters
相关产品推荐
相关产品推荐

