2017-06-02 72 views
1

我正在一個PowerShell WPF GUI工具,我堅持綁定管道輸出到列表視圖...我已經經歷了一些博客/文章,但無法找到方法來傳遞管道輸出到列表視圖列。綁定WPF列表視圖列與PowerShell管道輸出

我從XAML和PowerShell附代碼... XAML代碼:

<ListView Name="listdisk" HorizontalAlignment="Left" Height="415" Margin="20,67,0,0" VerticalAlignment="Top" Width="830" Grid.ColumnSpan="3" ScrollViewer.VerticalScrollBarVisibility="Visible">  
<ListView.View> 
<GridView>  
    <GridViewColumn Header="Server Name" DisplayMemberBinding ="{Binding 'ServerName'}" Width="200"/> 
    <GridViewColumn Header="C Disk Size(GB)" DisplayMemberBinding ="{Binding 'Csize'}" Width="105"/> 
    <GridViewColumn Header="C Free Space(GB)" DisplayMemberBinding ="{Binding 'Cfree'}" Width="105"/> 
    <GridViewColumn Header="C % Free Space" DisplayMemberBinding ="{Binding 'CPercentfree'}" Width="100"/> 
    <GridViewColumn Header="D Disk Size(GB)" DisplayMemberBinding ="{Binding 'Dsize'}" Width="105"/> 
    <GridViewColumn Header="D Free Space(GB)" DisplayMemberBinding ="{Binding 'Dfree'}" Width="100"/> 
    <GridViewColumn Header="D % Free Space" DisplayMemberBinding ="{Binding 'DPercentfree'}" Width="100"/> 
</GridView>  
</ListView.View>  
</ListView>  

Powershell的功能 -

Function Get-diskinfo{ 
[email protected]() 
$Getservers = Get-Content $dsksvr 
foreach ($CompName in $Getservers) 
{ 

$cdrivespace= Get-WMIObject Win32_logicaldisk -ComputerName $CompName | ?{$_.DeviceID -eq 'C:'} | Select @{Name=‘cTotalSize’;Expression={[int]($_.Size/1gb)}},` 
@{Name=‘cFreeSpace’;Expression={[int]($_.FreeSpace/1gb)}}, @{Name=‘cPercentFree’;Expression={[math]::Round($_.FreeSpace/$_.Size,2)*100}} 


$ddrivespace= Get-WMIObject Win32_logicaldisk -ComputerName $CompName | ?{$_.DeviceID -eq 'D:'} | Select @{Name=‘dTotalSize’;Expression={[int]($_.Size/1gb)}},` 
@{Name=‘dFreeSpace’;Expression={[int]($_.FreeSpace/1gb)}}, @{Name=‘dPercentFree’;Expression={[math]::Round($_.FreeSpace/$_.Size,2)*100}} 

    $diskinfo = New-Object psobject 
     Add-Member -InputObject $diskinfo -membertype noteproperty -name "ServerName" -value $CompName 
    Add-Member -InputObject $diskinfo -membertype noteproperty -name "cSize" -value $cdrivespace.cTotalSize 
    Add-Member -InputObject $diskinfo -membertype noteproperty -name "cFree" -value $cdrivespace.cFreeSpace 
    Add-Member -InputObject $diskinfo -membertype noteproperty -name "cPercentfree" -value $cdrivespace.cPercentFree 
    Add-Member -InputObject $diskinfo -membertype noteproperty -name "DSize" -value $ddrivespace.dTotalSize 
    Add-Member -InputObject $diskinfo -membertype noteproperty -name "DFree" -value $ddrivespace.dFreeSpace 
    Add-Member -InputObject $diskinfo -membertype noteproperty -name "DPercentfree" -value $ddrivespace.dPercentFree 
    $dsk +=$diskinfo 

} Return, $dsk 
} 

這就是我想我不這樣做正確的部分...有人可以指導我這個請.. ..?由於

$btndiskinfo.Add_Click({ 
get-diskinfo | % {$listdisk.items.add([pscustomobject]($_))} 
}) 

回答

0

使用{Binding WhatEverYouWant}代替{Binding 'WhatEverYouWant'}

當你需要傳遞一個自定義對象的列表視圖,您可以使用:

$btndiskinfo.Add_Click({ 
    $listdisk.ItemsSource = @(get-diskinfo) 
}) 

要確保您的列在列表視圖名稱有與您的自定義對象屬性同名

0

我有一個解決方法,你可以嘗試。而不是創建的foreach內PSObjects的陣列和功能後,將它添加到ListView的結束,嘗試創建1個PSCustomObject就像你已經這樣做,而是將它添加到ListView,然後有,你叫$dsk += $diskinfo

例如:

... 
Add-Member -InputObject $diskinfo -membertype noteproperty -name "DPercentfree" -value $ddrivespace.dPercentFree 
$listdisk.items.add([pscustomobject]($diskinfo))