Author Posts

October 26, 2015 at 9:08 am

Sorry for the newb question but I am really stuck here. I am trying to use

$SERIAL = (Get-WmiObject win32_bios).serialnumber

Which returns to me something like "MXL1160602"

All I need is the "60602"

I have tried all sorts of trims and replaces and I can not get it to give me the output I want.

I am not getting any errors, when I run the command with a trim or replace it goes through but it still gives me the whole result. The only thing I have found to work so far is $serial -replace "MXL", ""

October 26, 2015 at 9:12 am

$SERIAL.substring($SERIAL.length – 6, 6)

BTW. Your title says trim all but the last six. Your example shows only the last five.

October 26, 2015 at 9:30 am

I'd do this: "MXL1160602" -replace '.*?(?=.{1,6}$)'

But then again, I'm one of those weird people who likes to use regex. 😛

(The advantage, though, is that this works regardless of the length of the string. Using String.SubString() will throw an exception if the string is fewer than 6 characters, unless you add a bit of extra code to check for that condition.)

October 26, 2015 at 9:34 am

Another option that works regardless of length:

New-Object string (,@($serial.ToCharArray() | Select-Object -Last 6))

Or, in PowerShell v5:

[string]::new(@($serial.ToCharArray() | Select-Object -Last 6))

October 26, 2015 at 1:08 pm

Another option that works regardless of length:

$Serial.Substring( [math]::Max( 0, $Serial.Length – 6 ) )

October 27, 2015 at 5:50 am

here is my attempt

[string]$serial = $serial[-5..-1]

October 27, 2015 at 9:35 pm

My question is does the serial number data being returned need to be cleaned first?
I gathered serial numbers yesterday and they all had extra characters at the end (5 spaces).

Are you collecting serial numbers from one or many pcs?