将System.Object加载到DataGrid

时间:2019-07-17 08:55:09

标签: powershell sccm

我正在尝试从SCCM中获取一些数据,并将此信息放置在datagrid中。我的datagrid的代码如下:

[xml]$xaml = @"
<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Window_GuiManagement" Title="SCCM" WindowStartupLocation = "CenterScreen" 
    Width = "587.000" Height = "500.000" Visibility="Visible" WindowStyle="ToolWindow" ResizeMode="NoResize" Topmost="True">
<Grid>
    <DataGrid x:Name="datagrid_result" ItemsSource="{Binding}" Margin="11,10,10,0" VerticalAlignment="Top" Height="299" SelectionMode="Single" AlternationCount="1">
    </DataGrid>
</Grid>
</Window>
"@ 

我捕捉到的SCCM信息如下:

$data = Get-CMDevice | Where-Object {
    $_.LastLogonUser -like '*Walker*'
} | Select Name 

我尝试了

$datagrid_result.ItemsSource = $data

结果是System.Object,与您运行例如时得到的相同。 Get-Culture | Select Name,但会导致错误:

  

异常设置“ ItemsSource”:“无法转换类型的“ @ {Name = PCName}”值   “ Selected.Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlResultObject”以键入“ System.Collections.IEnumerable”。”

最后,我希望拥有的是特定用户最近登录的所有计算机的列表。

1 个答案:

答案 0 :(得分:1)

Select Name更改为Select -Expand Name,并将$data的类型更改为[string[]]

[string[]]$data = Get-CMDevice | Where-Object {
    $_.LastLogonUser -like '*Walker*'
} | Select -Expand Name 

通过这种方式,您将分配一个字符串数组作为ItemSource(它将接受),而不是单个WQL查询结果对象