使用 powershell 将整数存储在自定义对象中

Hec*_*res 4 powershell types object

我喜欢在 powershell 中使用如下所示的结构。它们使跟踪 6 个月后发生的事情变得更加容易。

$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
Run Code Online (Sandbox Code Playgroud)

但是,我一生都无法弄清楚如何将普通 int 存储为属性。我尝试了一些不同的事情。

需要会员类型

$processConfig | Add-Member -TypeName System.Int32 -Name TrimLeadingLines -Value 3
Run Code Online (Sandbox Code Playgroud)

那么为什么 Property 是参数的建议值呢?

$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
Run Code Online (Sandbox Code Playgroud)

横向思考,但有点狡猾

$processConfig | Add-Member -MemberType ScriptProperty -TypeName System.Int32 -Name TrimLeadingLines -Value { return 3 }
Run Code Online (Sandbox Code Playgroud)

我不想存储然后需要转换的字符串表示形式。是的,我可以使用 $var。是否有一种简单直接的方法可以在 Powershell 自定义对象中存储 Integer/Int32?

Dre*_*rew 5

我一直都是[int]3按照下面的方式做的。当我需要在对象中存储 int 时效果很好。

$processConfig | Add-Member -MemberType NoteProperty -Name TrimLeadingLines -Value $([int]3)
Run Code Online (Sandbox Code Playgroud)

这将返回 anInt32作为属性类型。

PS C:\> $processConfig.TrimLeadingLines.GetType()

IsPublic IsSerial Name  BaseType        
-------- -------- ----  --------        
True     True     Int32 System.ValueType
Run Code Online (Sandbox Code Playgroud)