[英]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) "}
在代碼的最后一行,我正在格式化表格以刪除不必要的內容。
$PCs | % {"$($_.UserName.Split("\")[1]) `t`t $($_.MachineOrRDSServerName) "}
有人可以幫助我從控制台獲取用戶名並僅顯示分配給它們的虛擬機嗎?
我嘗試在谷歌上搜索解決方案,但找不到任何相關內容。
謝謝!!
注意:我已經聲明了一個變量 uname 但還沒有使用它。 我不確定如何在這個用例中使用它。
嘿伙計們,在最深的 subreddits 中挖掘了更多內容后,我找到了一個帖子,解決了我的問題。
https://www.reddit.com/r/vmware/comments/d547nt/horizon_view_powercli_help/
下面是利用VMware.Hv.Equals類中的QueryFilterEquals來獲取用戶名及其屬性的代碼。
我正在跳過代碼的連接部分,它與問題中提到的相同。
#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 如何工作的詳細信息,請參閱下面給出的鏈接。
參考: https : //vdc-download.vmware.com/vmwb-repository/dcr-public/e2e25628-4ed2-43fc-8bad-54fb86f3bb0f/8e4d2491-c740-4778-ac43-ba8fc0ec8175/doc/doc/
感謝您的閱讀,我是 Powershell 編程的新手。 任何建議,將不勝感激。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.