$datagridview - System.String[]? not correct value?

Ask questions about creating Graphical User Interfaces (GUI) in PowerShell and using WinForms controls.
Forum rules
Do not post any licensing information in this forum.

Any code longer than three lines should be added as code using the 'Select Code' dropdown menu or attached as a file.
User avatar
lontru
Posts: 39
Joined: Fri Aug 18, 2017 4:36 am

$datagridview - System.String[]? not correct value?

Post by lontru » Fri Nov 02, 2018 7:00 am

Hi all

PowerShell Studio 2018 v5.5.154

Trying to build af tool for SCCM.
Why do i get this "System.String[]" i want the macaddr "{00:0A:E4:1E:8F:6E}" in the cell.

Code: Select all

[Codebox=powershell file=Untitled.ps1]

$button_search_Click={
	$textbox_devicename.Text
	$combo_item = Get-CMDevice -Name "*$($textbox_devicename.Text)*" -ForceWildcardHandling | Select-Object -Property Name, MACAddresses, CreationDate
	Update-DataGridView -DataGridView $datagridview_device -Item $combo_item
}
[/Codebox]
ISE Code
Image

Powershell Studio
Image

User avatar
jvierra
Posts: 12958
Joined: Tue May 22, 2007 9:57 am
Contact:

Re: $datagridview - System.String[]? not correct value?

Post by jvierra » Fri Nov 02, 2018 7:09 am

MacAddresses is an array of MAC addresses. You need to subscript it to get the address. You can also use "-join" to concatenate the array. Use a computed property to display the addresses.

User avatar
lontru
Posts: 39
Joined: Fri Aug 18, 2017 4:36 am

Re: $datagridview - System.String[]? not correct value?

Post by lontru » Fri Nov 02, 2018 10:11 am

could you provide a sample on how to do that?

User avatar
jvierra
Posts: 12958
Joined: Tue May 22, 2007 9:57 am
Contact:

Re: $datagridview - System.String[]? not correct value?

Post by jvierra » Fri Nov 02, 2018 2:02 pm

The following will help you understand how to use computed parameters. See Ex #4
help select-object -Examples

User avatar
lontru
Posts: 39
Joined: Fri Aug 18, 2017 4:36 am

Re: $datagridview - System.String[]? not correct value?

Post by lontru » Fri Nov 02, 2018 2:46 pm

[/Codebox]
  1. $button_search_Click={
  2.  
  3.     $CMDevices = Get-CMDevice -Name "*$($textbox_devicename.Text)*" -ForceWildcardHandling -Fast | Select-Object -Property ResourceId
  4.  
  5.     $CMDeviceObjects = @()
  6.  
  7.     foreach ($CMDevice in $CMDevices)
  8.  
  9.     {
  10.  
  11.         $CMResource = Get-CMResource -ResourceId "$($CMDevice.ResourceId)" -Fast | Select-Object -Property Name, MACAddresses, CreationDate, LastLogonUserName
  12.  
  13.         $CMResource.Name
  14.  
  15.         $CMDeviceObject = New-Object -TypeName psobject
  16.  
  17.         $CMDeviceObject | Add-Member -MemberType NoteProperty -Name Name -Value $CMResource.Name
  18.  
  19.         $CMDeviceObject | Add-Member -MemberType NoteProperty -Name MACAddresses -Value $($CMResource.MACAddresses -join ", ")
  20.  
  21.         $CMDeviceObject | Add-Member -MemberType NoteProperty -Name CreationDate -Value $CMResource.CreationDate
  22.  
  23.         $CMDeviceObject | Add-Member -MemberType NoteProperty -Name LastLogonUserName -Value $CMResource.LastLogonUserName
  24.  
  25.         $CMDeviceObjects += $CMDeviceObject
  26.  
  27.     }
  28.  
  29.     Update-DataGridView -DataGridView $datagridview_device -Item $CMDeviceObjects
  30.  
  31. }
  32.  
  33.  

User avatar
lontru
Posts: 39
Joined: Fri Aug 18, 2017 4:36 am

Re: $datagridview - System.String[]? not correct value?

Post by lontru » Fri Nov 02, 2018 3:05 pm

jvierra wrote:
Fri Nov 02, 2018 2:02 pm
The following will help you understand how to use computed parameters. See Ex #4
help select-object -Examples
With above i came to this solution.
  1. Get-CMDevice -Name *9999* -ForceWildcardHandling | foreach {(Get-CMResource -ResourceId "$($PSItem.ResourceId)" -Fast | Select-Object -Property Name,CreationDate,@{Name="MACAddresses"; Expression = {$($_.MACAddresses) -join ", "}})}

User avatar
lontru
Posts: 39
Joined: Fri Aug 18, 2017 4:36 am

Re: $datagridview - System.String[]? not correct value?

Post by lontru » Fri Nov 02, 2018 3:10 pm

  1. $button_search_Click={
  2.  
  3. $CMDevices = Get-CMDevice -Name "*$($textbox_devicename.Text)*" -ForceWildcardHandling -fast | foreach { (Get-CMResource -ResourceId "$($PSItem.ResourceId)" -Fast | Select-Object -Property Name, CreationDate,LastLogonUserName,@{ Name = "MACAddresses"; Expression = { $($_.MACAddresses) -join ", " } }) }
  4.  
  5. Update-DataGridView -DataGridView $datagridview_device -Item $CMDevices
  6.  
  7. }
Thank you. Think above code is the best solution. Learned about the -join and 'Name and Expression keys'

User avatar
lontru
Posts: 39
Joined: Fri Aug 18, 2017 4:36 am

Re: $datagridview - System.String[]? not correct value?

Post by lontru » Fri Nov 02, 2018 3:27 pm

Image

How do i autosize to the whole macaddress is visible? and the name space is smaller?

User avatar
jvierra
Posts: 12958
Joined: Tue May 22, 2007 9:57 am
Contact:

Re: $datagridview - System.String[]? not correct value?

Post by jvierra » Fri Nov 02, 2018 3:28 pm

Ok. Now lets simplify you code and make it readable and easier to maintain:

Code: Select all

$button_search_Click={
    $properties = @(
        'Name',
        'CreationDate',
        'LastLogonUserName',
        @{ n='MACAddresses'; e = {$_.MACAddresses -join ', '}}
    )
    $CMDevices = Get-CMDevice -Name "*$($textbox_devicename.Text)*" -ForceWildcardHandling -fast | 
        ForEach-Object{
            Get-CMResource -ResourceId $PSItem.ResourceId -Fast
        } |
        Select-Object $properties
    Update-DataGridView -DataGridView $datagridview_device -Item $CMDevices
}
Avoid long code lines by using PowerShell's capability to use advanced arguments and syntax formatting.

User avatar
jvierra
Posts: 12958
Joined: Tue May 22, 2007 9:57 am
Contact:

Re: $datagridview - System.String[]? not correct value?

Post by jvierra » Fri Nov 02, 2018 3:32 pm

lontru wrote:
Fri Nov 02, 2018 3:27 pm
How do i autosize to the whole macaddress is visible? and the name space is smaller?
Set the autosize property of the grid.

Locked