Started in recent weeks in a Junior infrastructure role, and begun playing around with powershell to help save some time here and there.
I am trying to do the following: 1- I'm port a CSV file with a single column names asset 2- Perform a "ForEach" check on each line to find the device's serial number 3- Output results to a CSV with two column "asset" and "serialnumber"
I have dabbled in a few areas, and am currently sitting at something like this:
$file1 = Import-Csv -path "c:\temp\assets.csv" | ForEach-Object {
$asset = $_.asset
}
wmic /node:$asset bios get serialnumber
Export-Csv -Path "c:\temp\assetandserial.csv" -NoTypeInformation
As you may or may not see, I tried to set the column labelled "asset" as the variable, however, not sure if I placed it correctly. I have tried a few other things, but honestly it's all new to me, so I haven't the foggiest idea where to go from here.
CodePudding user response:
wmic
is deprecated, and, for rich type support (OO processing), using PowerShell-native cmdlets is preferable in general.wmic
's immediate PowerShell counterpart isGet-WmiObject
, which, however, is equally deprecated, in favor ofGet-CimInstance
.- Important: The command below uses
Get-CimInstance
, but note that the CIM cmdlets use a different remoting protocol than the obsolete WMI cmdlets. In short: To use the CIM cmdlets with remote computers, those computers must be set up in the same way that PowerShell remoting requires - see this answer for details.
- Important: The command below uses
Get-CimInstance Win32_BIOS -ComputerName (Import-Csv c:\temp\assets.csv).asset |
Select-Object @{ n='Asset'; e='PSComputerName' }, SerialNumber |
Sort-Object Asset |
Export-Csv c:\temp\assetandserial.csv -NoTypeInformation
Note the use of member-access enumeration to extract all
.asset
values directly from the collection of objects returned fromImport-Csv
.All computer (asset) names are passed at once to
Get-CimInstance
, which queries them in parallel. Since the ordering of the responses from the targeted remote machines isn't guaranteed,Sort-Object
is used to sort the results.A calculated property is used with
Select-Object
to rename the automatically added.PSComputerName
property toAsset
.