【发布时间】:2019-06-17 17:37:14
【问题描述】:
我在使用此代码时遇到问题,如果数组中的项目返回的字符串少于两个,则该字符串将显示为列表。
例如,如果我有两个集群。列表框会给我选择让我们说 Test-Cluster 和 Dev-Cluster 的选项;但是,如果只有 Test-Cluster 是唯一可用的集群,则列表框会将字符串的每个字母显示为列表框中的不同选项。我似乎无法弄清楚为什么。见图片:
#event: when Environment is selected
$wpFBoxEnvironment.Add_DropDownClosed({
Disconnect-VIServer * -Confirm:$false
#empty VCenters inside form
$wpFBoxSrcVCenter.Items.Clear()
$wpFListTgtVCenters.Items.Clear()
#empty Source VMs inside form
$wpFListSrcVMs.Items.Clear()
#validate VI servers connetion and connect if session doesn't exist
$VServers = $vdiEnvironments |
Where-Object Env -like $wpFBoxEnvironment.Text
#notify use to wait for vCenter server login
Write-Host "Logging in to all $($wpFBoxEnvironment.Text) servers. Please wait..."
foreach ($VServer in $VServers) {
$sessionID = ($global:DefaultVIServers | Where-Object -FilterScript {$_.Name -like $VServer.Name}).sessionId
if ($sessionID) {
Connect-VIServer -Server $VServer.Name -Session $sessionID
} elseif ($credential) {
Connect-VIServer -Server $VServer.Name -Credential $credential
} else {
throw 'Connection Error'
}
}
$clusters = Get-Cluster | Select-Object Name, Uid
$clusters | ForEach-Object {
$_ | Add-Member -MemberType NoteProperty -Name VCName -Value $_.Uid.Split('@')[1].Split(':')[0]
}
$datastores = Get-Datastore | Select-Object -Property Name, DatastoreBrowserPath, FreeSpaceMB, CapacityMB
$datastores | ForEach-Object {
$_ | Add-Member -MemberType NoteProperty -Name VCName -Value $_.DatastoreBrowserPath.Split('\')[1].replace('@443','')
$_.FreeSpaceMB = [int]$_.FreeSpaceMB
$_.CapacityMB = [int]$_.CapacityMB
}
$portgroups = Get-VDPortgroup | Select-Object VlanConfiguration, Name, NumPorts, Uid | ? VlanConfiguration -notlike "*0-4094*"
$portgroups | ForEach-Object {
$_ | Add-Member -MemberType NoteProperty -Name VCName -Value $_.Uid.Split('@')[1].Split(':')[0]
$_.NumPorts = [int]$_.NumPorts
}
$vCenters = @()
foreach ($vCenter in $VDIEnvironments) {
#Find single clusters and padd array
if (($clusters | ? VCName -like $vCenter.Name).Count -eq 1) {
$clusters += ("-----")
}
$vCenter |
Add-Member -MemberType NoteProperty -Name TargetCluster -Value (
$clusters | ? VCName -like $vCenter.Name
)[0].Name -Force
$vCenter |
Add-Member -MemberType NoteProperty -Name Clusters -Value $(
$clusters | ? VCName -like $vCenter.Name
).Name -Force
$vCenter |
Add-Member -MemberType NoteProperty -Name TargetDatastore -Value $(
$datastores | ? VCName -like $vCenter.Name | Sort-Object -Descending FreeSpaceMB
)[0].Name -Force
$vCenter |
Add-Member -MemberType NoteProperty -Name Datastores -Value $(
$datastores | ? VCName -like $vCenter.Name
).Name -Force
$vCenter |
Add-Member -MemberType NoteProperty -Name TargetPortgroup -Value (
$portgroups | ? VCName -like $vCenter.Name | Sort-Object -Descending NumPorts
)[0].Name -Force
$vCenter |
Add-Member -MemberType NoteProperty -Name Portgroups -Value $(
$portgroups | ? VCName -like $vCenter.Name
).Name -Force
$vCenters += $vCenter
}
#fill VCenters inside form from selected Environment
$selectedVCenters = $vCenters |
Where-Object Env -like $wpFBoxEnvironment.Text |
Where-Object Datastores -ne $Null
$selectedVCenters | ForEach-Object {
$wpFBoxSrcVCenter.Items.Add($_.Name)
$wpFListTgtVCenters.Items.Add($_)
$wpFListTgtVCenters.SelectedItems.Add($_)
}
})
<GridViewColumn Header="Target Cluster"
Width="160" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding 'Clusters'}"
SelectedItem="{Binding Path='TargetCluster', Mode=TwoWay}"
Width="145"
/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
【问题讨论】:
标签: wpf powershell xaml listbox