我正在寻找在非持久性 VDI 环境中持久存在的 Windows 桌面操作系统中的值,这些值可以通过编程方式访问(例如 PowerShell)。我知道的唯一值(不适合我的要求)是 DNS 主机名。
场景……
我已经创建了一个按每台机器每月授权的 SaaS 应用程序。
我的桌面代理使用持久系统值生成一个唯一 ID,并将该 ID 提交给我的 API,该 API 检查该 ID 在我们这边是否唯一,以及客户帐户中是否有足够的未使用信用额度。如果这两个条件都满足,则会创建一个 28 天的许可证密钥,并在 API 响应中将其发送回代理。
这种设置非常适合传统的持久性桌面,但我想满足非持久性 VDI 环境的需求。目前,如果一个组织有 100 个非持久性桌面,并且每天在用户会话后重建桌面,则此模型将导致每 28 天发放并收取 2800 个许可证,而不是 100 个...这对我的底线来说是好事,但对客户长久性来说却不是好事!
问题...
哪些操作系统值(如果有)会在非持久性 Windows 10 VDI 上的会话之间持续存在?是只有主机名,还是有 VDI 配置也会导致主机名更改?(我自己不知道)。
谢谢你!
答案1
现在抱歉,如果我不能 100% 了解您的 API 在哪里以及如何连接,但是:
如果您来自交付控制器端,则可以很好地查看唯一标识符。借助必要的 SDK,PowerShell 可以通过 get-brokermachine 为您提供大量信息(我会添加一些必要的过滤器,例如 -DesktopGroupName“YourDeliveryGroupName”,只需查看文档即可这里。
如果您谈论的是桌面本身,那么理论上您可以获取 MAC 地址,因为(我认为与您的主机类型无关)它始终是唯一的,并且如果您添加了必要的 SDK,您就可以通过 powershell 获取该值。
除此之外,我担心(我刚刚检查了我的非持久性 VirtualDesktop VDI)除了您的 DNS 之外没有其他真正唯一的标识符。
因此,如果您真的想避免使用 DNS 和 MAC,理论上您可以获取唯一的 SID(或者实际上是任何其他唯一值,Citrix DC 会为您提供一些),将其推送到相应的设备并从那里开始。我正在考虑 for-each get-brokermachine |...
(虽然我很喜欢 PoSH,但我并不完全清楚如何完成这项特定任务)
答案2
已经有一段时间了,但一年后有人回答让我回想起了:)
我正在使用以下内容的散列组合:
MachineGuid
SOFTWARE\Microsoft\Cryptography
键中的值- UUID 来自
(Get-CimInstance Win32_ComputerSystemProduct).UUID
- 从专有私有 API 收集的额外熵
每次看到新的设备 ID,我的 API 都会通过置信度函数运行一组有关硬件和软件的值(大约 20 个)。如果其中 15 个值匹配,则应用现有许可证,否则分配新许可证。