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.
-
lontru
- Posts: 48
- Joined: Fri Aug 18, 2017 4:36 am
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
Powershell Studio

-
jvierra
- Posts: 13128
- Joined: Tue May 22, 2007 9:57 am
-
Contact:
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.
-
lontru
- Posts: 48
- Joined: Fri Aug 18, 2017 4:36 am
Post
by lontru » Fri Nov 02, 2018 10:11 am
could you provide a sample on how to do that?
-
jvierra
- Posts: 13128
- Joined: Tue May 22, 2007 9:57 am
-
Contact:
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
-
lontru
- Posts: 48
- Joined: Fri Aug 18, 2017 4:36 am
Post
by lontru » Fri Nov 02, 2018 2:46 pm
[/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
}
-
lontru
- Posts: 48
- Joined: Fri Aug 18, 2017 4:36 am
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.
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 ", "}})}
-
lontru
- Posts: 48
- Joined: Fri Aug 18, 2017 4:36 am
Post
by lontru » Fri Nov 02, 2018 3:10 pm
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'
-
lontru
- Posts: 48
- Joined: Fri Aug 18, 2017 4:36 am
Post
by lontru » Fri Nov 02, 2018 3:27 pm
How do i autosize to the whole macaddress is visible? and the name space is smaller?
-
jvierra
- Posts: 13128
- Joined: Tue May 22, 2007 9:57 am
-
Contact:
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.
-
jvierra
- Posts: 13128
- Joined: Tue May 22, 2007 9:57 am
-
Contact:
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.