Unable to get PowerShell code to work
The issue you are having here is that PowerShell is trying to get the property defined by $deviceinfile
from the object $computer
. However $computer
is just a string that does not have a property $deviceinfile
. Is that supposed to be a suffix as part of your naming convention?
Brief Explanation of the issue
Look at the following example
$Computer = "comp1"
$deviceinfile = "Test"
$Computer.$deviceinfile
That returned nothing since there is not "Test" property on the $computer
string object. I think the result you were expecting was comp1.Test
. Now look at this example.
$deviceinfile = "Test"
$computer = New-Object -TypeName PSCustomObject -Property @{Test = "Bagel"}
$Computer.$deviceinfile
We made an object with a property called Test
. "Bagel" is what is returned from that code.
What you can do in your code
If this is a naming convention you need to put that into quotes to stop it from being treated like a property call. Those variable will be expanded the way you would expect them. That is of course assuming you have $deviceinfile
defined before it is called.
$computerSystem = get-wmiobject Win32_ComputerSystem -Computer "$computer.$deviceinfile"
Else just remove it.
$computerSystem = get-wmiobject Win32_ComputerSystem -Computer $computer
Aaron Doyle
Updated on June 23, 2022Comments
-
Aaron Doyle almost 2 years
I am trying to run a script from my Active Directory host to the other hosts on the network that will pull device info for each of the hosts.
The code I am using is:
# Exports Local System Information to CSV # Run this PowerShelll script at log on to collect PC information to a CSV file on a network share # Thom McKiernan 28/08/2014 #Get hostnames #$Computers = Get-Content ("C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\ComputerListAug2015.txt") -ErrorAction SilentlyContinue foreach ($computer in Get-Content "C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\ComputerListAug2015.txt") { # Collect the info from WMI $computerSystem = get-wmiobject Win32_ComputerSystem -Computer $computer.$deviceinfile $computerBIOS = get-wmiobject Win32_BIOS -Computer $computer.$deviceinfile $computerOS = get-wmiobject Win32_OperatingSystem -Computer $computer.$deviceinfile $computerCPU = get-wmiobject Win32_Processor -Computer $computer.$deviceinfile $computerHDD = Get-WmiObject Win32_LogicalDisk -ComputerName $computer.$deviceinfile -Filter drivetype=3 $macAddress = Get-WmiObject win32_networkadapterconfiguration -Computer $computer.$deviceinfile -Filter "IpEnabled = TRUE" #Build the CSV file $csvObject = New-Object PSObject -property @{ "PCName" = $computerSystem.Name "Manufacturer" = $computerSystem.Manufacturer "Model" = $computerSystem.Model "SerialNumber" = $computerBIOS.SerialNumber "RAM" = "{0:N2}" -f ($computerSystem.TotalPhysicalMemory/1GB) + "GB" "HDDSize" = "{0:N2}" -f ($computerHDD.Size/1GB) + "GB" "HDDFree" = "{0:P2}" -f ($computerHDD.FreeSpace/$computerHDD.Size) + "GB" "CPU" = $computerCPU.Name "OS" = $computerOS.caption "SP" = $computerOS.ServicePackMajorVersion "User" = $computerSystem.UserName "BootTime" = $computerOS.ConvertToDateTime($computerOS.LastBootUpTime) "MACAddress" = $macAddress.MacAddress } #Export the fields you want from above in the specified order $csvObject | Select PCName, Maufacturer, Model, SerialNumber, RAM, HDDSize, HDDFree, CPU, OS, SP, User, BootTime, MACAddress | Export-Csv 'system-info.csv' -NoTypeInformation -Append } # Open CSV file for review (leave this line out when deploying) notepad system-info.csv
However, I am continuously getting the following error:
Get-WmiObject : Cannot validate argument on parameter 'ComputerName'. The argument is null or empty. Supply an argument that is not null or empty and then try the command again.
I have tried to set up the txt file as just computer names (exported from Active Directory) and I have tried to append each name with ".domain.com" and neither have worked.
I tried to have just my own device in the list, and no error occurred, but there was no output either. It was as if it didn't run when using "powershell -noexit .\ComputerDetails.ps1" but when I just run the script by right-clicking on it I can see the errors fly by, and an error from Notepad saying the file does not exist.
I have tried to google this issue, and found countless resources, that do not seem to help get rid of this error.
Full list of errors recieved:
Get-WmiObject : Cannot validate argument on parameter 'ComputerName'. The argum ent is null or empty. Supply an argument that is not null or empty and then try the command again. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:12 char:63 + $computerSystem = get-wmiobject Win32_ComputerSystem -Computer <<<< $compute r.$deviceinfile + CategoryInfo : InvalidData: (:) [Get-WmiObject], ParameterBindi ngValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power Shell.Commands.GetWmiObjectCommand Get-WmiObject : Cannot validate argument on parameter 'ComputerName'. The argum ent is null or empty. Supply an argument that is not null or empty and then try the command again. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:13 char:51 + $computerBIOS = get-wmiobject Win32_BIOS -Computer <<<< $computer.$deviceinf ile + CategoryInfo : InvalidData: (:) [Get-WmiObject], ParameterBindi ngValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power Shell.Commands.GetWmiObjectCommand Get-WmiObject : Cannot validate argument on parameter 'ComputerName'. The argum ent is null or empty. Supply an argument that is not null or empty and then try the command again. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:14 char:60 + $computerOS = get-wmiobject Win32_OperatingSystem -Computer <<<< $computer.$ deviceinfile + CategoryInfo : InvalidData: (:) [Get-WmiObject], ParameterBindi ngValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power Shell.Commands.GetWmiObjectCommand Get-WmiObject : Cannot validate argument on parameter 'ComputerName'. The argum ent is null or empty. Supply an argument that is not null or empty and then try the command again. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:15 char:55 + $computerCPU = get-wmiobject Win32_Processor -Computer <<<< $computer.$devic einfile + CategoryInfo : InvalidData: (:) [Get-WmiObject], ParameterBindi ngValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power Shell.Commands.GetWmiObjectCommand Get-WmiObject : Cannot validate argument on parameter 'ComputerName'. The argum ent is null or empty. Supply an argument that is not null or empty and then try the command again. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:16 char:61 + $computerHDD = Get-WmiObject Win32_LogicalDisk -ComputerName <<<< $computer. $deviceinfile -Filter drivetype=3 + CategoryInfo : InvalidData: (:) [Get-WmiObject], ParameterBindi ngValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power Shell.Commands.GetWmiObjectCommand Get-WmiObject : Cannot validate argument on parameter 'ComputerName'. The argum ent is null or empty. Supply an argument that is not null or empty and then try the command again. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:17 char:72 + $macAddress = Get-WmiObject win32_networkadapterconfiguration -Computer <<<< $computer.$deviceinfile -Filter "IpEnabled = TRUE" + CategoryInfo : InvalidData: (:) [Get-WmiObject], ParameterBindi ngValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power Shell.Commands.GetWmiObjectCommand Attempted to divide by zero. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:27 char:53 + "HDDFree" = "{0:P2}" -f ($computerHDD.FreeSpace/ <<<< $computerHDD.Size) + "GB" + CategoryInfo : NotSpecified: (:) [], RuntimeException + FullyQualifiedErrorId : RuntimeException Export-Csv : A parameter cannot be found that matches parameter name 'Append'. At C:\Users\Administrator.ESP\Documents\SoftwareAuditing\ComputerDetails\Comput erDetails.ps1:37 char:183 + $csvObject | Select PCName, Maufacturer, Model, SerialNumber, RAM, HDDSize, H DDFree, CPU, OS, SP, User, BootTime, MACAddress | Export-Csv 'system-info.csv' -NoTypeInformation -Append <<<< + CategoryInfo : InvalidArgument: (:) [Export-Csv], ParameterBind ingException + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm ands.ExportCsvCommand