Author Posts

October 21, 2013 at 7:40 am

$computerlist = Get-ADComputer -Filter * | select -expand name
icm -ComputerName $computerlist {Get-WmiObject win32_computersystem -ComputerName 'localhost' | where username -like "crojas" | select username, name
}

when I run this script this is returned for all computers on my network, thank god its a small one. Am I able to do this, I am a newbie so I am experimenting.

Cannot bind parameter 'FilterScript'. Cannot convert the "username" value of type "System.String" to type "System.Management.Automation.ScriptBlock".
+ CategoryInfo : InvalidArgument: (:) [Where-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand
+ PSComputerName : ARRIS-20

I would like to be able to enter a user name and find the computer name that the user has logged into so that I can remote into for support purposes.

thanks for your time and knowledge

October 21, 2013 at 7:45 am

Most likely, some of these computers are running PowerShell 2.0, and your "where" syntax only works on PowerShell 3.0 or later. You can try changing:

# This:
where username -like "crojas"

# to this:
Where-Object { $_.username -like "crojas" }

Edit: On a side note, Get-WmiObject has its own remote capabilities, if you would prefer to let WMI do the work instead of PowerShell Remoting. That's up to you; it will eventually work either way, once the bugs are fixed.

October 22, 2013 at 5:01 am

I have tried that but I get the same error message. I tried to pipe in GM to see what data types it likes because according the message it does not like throwing a string at the script block.

October 22, 2013 at 5:23 am

So you ran it like this, and still got the same error message?

$computerlist = Get-ADComputer -Filter * | select -expand name
Invoke-Command -ComputerName $computerlist -ScriptBlock { Get-WmiObject win32_computersystem -ComputerName 'localhost' | Where-Object { $_.username -like "*crojas*" } | select username, name }

If I were doing this, I'd probably rewrite it this way (not using Invoke-Command at all, since WMI already works remotely, and making a few small performance tweaks):

$computerlist = Get-ADComputer -Filter * -Properties Name | Select-Object -ExpandProperty Name

Get-WmiObject -ComputerName $computerlist -Class Win32_ComputerSystem -Filter 'UserName LIKE "%crojas%"' -Property UserName,Name |
Select-Object -Property UserName, Name