通过在 Vmware Horizon (PowerCLI) 中输入用户名来获取分配的 VM 名称
Grabbing assigned VM names by entering username in Vmware Horizon (PowerCLI)
我一直在研究 PowerShell 代码以从所有桌面池中获取 VM 名称。
我正在使用安装了 PowerShell 7 的 PowerCLI。
我已经设法获得所有用户及其分配的机器的输出。但是,我很难以一种可以输入单个用户名的方式优化代码,它只会向我显示该用户分配的 VM。
这是我目前得到的代码
#Import-Module VMware.VimAutomation.Core
#Import-Module Activedirectory
Connect-VIServer -server servername123 -Force
Connect-HVServer -server server.name.123
$uname = Read-Host -Prompt 'Input the user name you wish to find:' #User-Input
$Global:DefaultHVServers
$query = New-Object "Vmware.Hv.QueryDefinition"
$query.queryEntityType = 'SessionLocalSummaryView'
$qSrv = New-Object "Vmware.Hv.QueryServiceService"
$PCs = ($qSRv.QueryService_Query($global:DefaultHVServers[0].ExtensionData,$query) |
Select -ExpandProperty Results |
Select -ExpandProperty NamesData |
Select-Object -Property UserName,MachineOrRDSServerName)
$PCs | % {"$($_.UserName.Split("\")[1]) `t`t $($_.MachineOrRDSServerName) "}
在代码的最后一行,我正在格式化 table 以删除不必要的内容。
$PCs | % {"$($_.UserName.Split("\")[1]) `t`t $($_.MachineOrRDSServerName) "}
有人可以帮我从控制台获取用户名并只显示分配给他们的 VM 吗?
我尝试使用谷歌搜索解决方案,但找不到任何相关内容。
谢谢!!
注意: 我已经声明了一个变量uname但是还没有使用它。我不确定如何在此用例中使用它。
在最深的 subreddits 中深入挖掘后,我发现 post 解决了我的问题。
https://www.reddit.com/r/vmware/comments/d547nt/horizon_view_powercli_help/
下面是利用 QueryFilterEquals 的代码
从 VMware.Hv.Equals class 获取用户名及其属性。
我跳过了代码的连接部分,它与问题中提到的相同。
#Get User Input for UserName
$UserName = Read-Host -Prompt 'Input the user name you wish to find:'
#Create Horizon Services object
$HorizonServerServices = $global:DefaultHVServers[0].ExtensionData
#Create Query Definition object with EntityType SessionLocalSummaryView
$HorizonQuery = New-Object VMware.Hv.QueryDefinition
$HorizonQuery.QueryEntityType = 'SessionLocalSummaryView'
#Create Query Filter Object
$QueryFilterEquals = New-Object VMware.Hv.QueryFilterEquals
$QueryFilterEquals.MemberName = 'namesData.userName'
$QueryFilterEquals.value = "domain.loc$UserName"
$HorizonQuery.Filter = $QueryFilterEquals
$HorizonQueryService = New-Object VMware.Hv.QueryServiceService
$SearchResult = $HorizonQueryService.QueryService_Query($HorizonServerServices, $HorizonQuery)
if ($SearchResult.Results)
{
$SearchResult.Results.Namesdata
}
我们不必在最后删除查询,因为它不消耗任何服务器端资源。这是一个虚拟查询。有关 QueryService 如何工作的详细信息,请参阅下面给出的 link。
我一直在研究 PowerShell 代码以从所有桌面池中获取 VM 名称。
我正在使用安装了 PowerShell 7 的 PowerCLI。
我已经设法获得所有用户及其分配的机器的输出。但是,我很难以一种可以输入单个用户名的方式优化代码,它只会向我显示该用户分配的 VM。
这是我目前得到的代码
#Import-Module VMware.VimAutomation.Core
#Import-Module Activedirectory
Connect-VIServer -server servername123 -Force
Connect-HVServer -server server.name.123
$uname = Read-Host -Prompt 'Input the user name you wish to find:' #User-Input
$Global:DefaultHVServers
$query = New-Object "Vmware.Hv.QueryDefinition"
$query.queryEntityType = 'SessionLocalSummaryView'
$qSrv = New-Object "Vmware.Hv.QueryServiceService"
$PCs = ($qSRv.QueryService_Query($global:DefaultHVServers[0].ExtensionData,$query) |
Select -ExpandProperty Results |
Select -ExpandProperty NamesData |
Select-Object -Property UserName,MachineOrRDSServerName)
$PCs | % {"$($_.UserName.Split("\")[1]) `t`t $($_.MachineOrRDSServerName) "}
在代码的最后一行,我正在格式化 table 以删除不必要的内容。
$PCs | % {"$($_.UserName.Split("\")[1]) `t`t $($_.MachineOrRDSServerName) "}
有人可以帮我从控制台获取用户名并只显示分配给他们的 VM 吗?
我尝试使用谷歌搜索解决方案,但找不到任何相关内容。
谢谢!!
注意: 我已经声明了一个变量uname但是还没有使用它。我不确定如何在此用例中使用它。
在最深的 subreddits 中深入挖掘后,我发现 post 解决了我的问题。
https://www.reddit.com/r/vmware/comments/d547nt/horizon_view_powercli_help/
下面是利用 QueryFilterEquals 的代码 从 VMware.Hv.Equals class 获取用户名及其属性。
我跳过了代码的连接部分,它与问题中提到的相同。
#Get User Input for UserName
$UserName = Read-Host -Prompt 'Input the user name you wish to find:'
#Create Horizon Services object
$HorizonServerServices = $global:DefaultHVServers[0].ExtensionData
#Create Query Definition object with EntityType SessionLocalSummaryView
$HorizonQuery = New-Object VMware.Hv.QueryDefinition
$HorizonQuery.QueryEntityType = 'SessionLocalSummaryView'
#Create Query Filter Object
$QueryFilterEquals = New-Object VMware.Hv.QueryFilterEquals
$QueryFilterEquals.MemberName = 'namesData.userName'
$QueryFilterEquals.value = "domain.loc$UserName"
$HorizonQuery.Filter = $QueryFilterEquals
$HorizonQueryService = New-Object VMware.Hv.QueryServiceService
$SearchResult = $HorizonQueryService.QueryService_Query($HorizonServerServices, $HorizonQuery)
if ($SearchResult.Results)
{
$SearchResult.Results.Namesdata
}
我们不必在最后删除查询,因为它不消耗任何服务器端资源。这是一个虚拟查询。有关 QueryService 如何工作的详细信息,请参阅下面给出的 link。