Page 1 of 2

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

Posted: Fri Nov 02, 2018 7:00 am
by lontru
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

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

Posted: Fri Nov 02, 2018 7:09 am
by jvierra
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.

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

Posted: Fri Nov 02, 2018 10:11 am
by lontru
could you provide a sample on how to do that?

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

Posted: Fri Nov 02, 2018 2:02 pm
by jvierra
The following will help you understand how to use computed parameters. See Ex #4
help select-object -Examples

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

Posted: Fri Nov 02, 2018 2:46 pm
by lontru
[/Codebox]

Code: Select all

$button_search_Click={
$CMDevices = Get-CMDevice -Name "*$($textbox_devicename.Text)*" -ForceWildcardHandling -Fast | Select-Object -Property ResourceId
$CMDeviceObjects = @()
foreach ($CMDevice in $CMDevices)
{
$CMResource = Get-CMResource -ResourceId "$($CMDevice.ResourceId)" -Fast | Select-Object -Property Name, MACAddresses, CreationDate, LastLogonUserName
$CMResource.Name
$CMDeviceObject = New-Object -TypeName psobject
$CMDeviceObject | Add-Member -MemberType NoteProperty -Name Name -Value $CMResource.Name
$CMDeviceObject | Add-Member -MemberType NoteProperty -Name MACAddresses -Value $($CMResource.MACAddresses -join ", ")
$CMDeviceObject | Add-Member -MemberType NoteProperty -Name CreationDate -Value $CMResource.CreationDate
$CMDeviceObject | Add-Member -MemberType NoteProperty -Name LastLogonUserName -Value $CMResource.LastLogonUserName
$CMDeviceObjects += $CMDeviceObject
}
Update-DataGridView -DataGridView $datagridview_device -Item $CMDeviceObjects
}

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

Posted: Fri Nov 02, 2018 3:05 pm
by lontru
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.

Code: Select all

Get-CMDevice -Name *9999* -ForceWildcardHandling | foreach {(Get-CMResource -ResourceId "$($PSItem.ResourceId)" -Fast | Select-Object -Property Name,CreationDate,@{Name="MACAddresses"; Expression = {$($_.MACAddresses) -join ", "}})}

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

Posted: Fri Nov 02, 2018 3:10 pm
by lontru

Code: Select all

$button_search_Click={
$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 ", " } }) }
Update-DataGridView -DataGridView $datagridview_device -Item $CMDevices
}
Thank you. Think above code is the best solution. Learned about the -join and 'Name and Expression keys'

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

Posted: Fri Nov 02, 2018 3:27 pm
by lontru
Image

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

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

Posted: Fri Nov 02, 2018 3:28 pm
by jvierra
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.

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

Posted: Fri Nov 02, 2018 3:32 pm
by jvierra
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.