首页 > 解决方案 > 使用 powershell 将整数存储在自定义对象中

问题描述

我喜欢在 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

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

需要 MemberType

$processConfig | Add-Member -TypeName System.Int32 -Name TrimLeadingLines -Value 3

那么为什么 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

侧身思考,但有点狡猾

$processConfig | Add-Member -MemberType ScriptProperty -TypeName System.Int32 -Name TrimLeadingLines -Value { return 3 }

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

标签: powershellobjecttypes

解决方案


我一直[int]3按照以下方式进行。当我需要将 int 存储在对象中时效果很好。

$processConfig | Add-Member -MemberType NoteProperty -Name TrimLeadingLines -Value $([int]3)

这将返回一个Int32作为属性类型。

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

IsPublic IsSerial Name  BaseType        
-------- -------- ----  --------        
True     True     Int32 System.ValueType

推荐阅读