I like to use constructs like the following in powershell. They make following what is happening 6 months later a lot easier.
$processConfig = New-Object -TypeName psobject
$processConfig | Add-Member -MemberType NoteProperty -Name StartDate -Value ($startofweek)
$processConfig | Add-Member -MemberType NoteProperty -Name StartDateStr -Value (Get-Date $processConfig.StartDate -Format "yyyyMMdd HH:mm:ss")
$processConfig | Add-Member -MemberType NoteProperty -Name EndDate -Value ($endofweek)
$processConfig | Add-Member -MemberType NoteProperty -Name EndDateStr -Value (Get-Date $processConfig.EndDate -Format "yyyyMMdd HH:mm:ss")
$processConfig | Add-Member -MemberType NoteProperty -Name TargetDir -Value "C:\Scripts\out\"
$dbConfig = New-Object -TypeName psobject
$dbConfig | Add-Member -MemberType NoteProperty -Name Server -Value "server.address"
#etc
However, I cannot for the life of me figure out how to store a plain int as a property. I've tried a few different things.
Requires a MemberType
$processConfig | Add-Member -TypeName System.Int32 -Name TrimLeadingLines -Value 3
Then why is Property a suggested value for the argument?
$processConfig | Add-Member -MemberType Property -TypeName System.Int32 -Name TrimLeadingLines -Value 3
Add-Member : Cannot add a member with type "Property". Specify a different type for the MemberTypes parameter.
At C:\Scripts\kh_tca_export_ftps.ps1:80 char:18
+ ... essConfig | Add-Member -MemberType Property -TypeName System.Int32 -N ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Add-Member], InvalidOperationException
+ FullyQualifiedErrorId : CannotAddMemberType,Microsoft.PowerShell.Commands.AddMemberCommand
Thinking sideways, but a bit dodgy
$processConfig | Add-Member -MemberType ScriptProperty -TypeName System.Int32 -Name TrimLeadingLines -Value { return 3 }
I do not want to store a string representation I then need to cast. Yes i can use a $var. Is there a simple straightforward way to store an Integer/Int32 in Powershell Custom Object?
I have always done [int]3
as per below. Works well when I need to store an int in an object.
$processConfig | Add-Member -MemberType NoteProperty -Name TrimLeadingLines -Value $([int]3)
This returns an Int32
as the property type.
PS C:\> $processConfig.TrimLeadingLines.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType