晚上好,小问题请教一下,如果可以的话。
我知道可以通过将其调用为空对象,然后逐个添加属性来实现。
$Obj = New-Object PSObject
$Obj.name = “hello”
$Obj.type = $Obj.name ‘+’ “world”
有没有一种方法可以将此作为一个属性行来完成?
$Obj = New-Object PSObject -Property @{
Name = “hello”
Type = $Obj.name ‘+’ “world”
}
晚上好,小问题请教一下,如果可以的话。
我知道可以通过将其调用为空对象,然后逐个添加属性来实现。
$Obj = New-Object PSObject
$Obj.name = “hello”
$Obj.type = $Obj.name ‘+’ “world”
$Obj = New-Object PSObject -Property @{
Name = “hello”
Type = $Obj.name ‘+’ “world”
}
这可能会帮助您使用PowerShell class
实现您正在寻找的内容:
class SomeClass {
[string] $Name
[string] $Type
SomeClass() { }
SomeClass([string] $Name, [string] $Type) {
# ctor for custom Type
$this.Name = $Name
$this.Type = $Type
}
static [SomeClass] op_Explicit([string] $Name) {
# explicit cast using only `Name`
return [SomeClass]::new($Name, $Name + 'World')
}
}
现在你可以使用自定义的值来实例化 Type
:
PS ..\> [SomeClass]@{ Name = 'hello'; Type = 'myCustomType' }
Name Type
---- ----
hello myCustomType
或者让显式转换运算符根据Name
参数处理Type
属性的预定义值:
PS ..\> [SomeClass] 'hello'
Name Type
---- ----
hello helloWorld
Santiago Squarzon提供了一个有用的答案,通过定义一个class
来创建一个专门的.NET类型来解决您的问题。
然而,您可以使用以下解决方法避免创建一个专门的.NET类,该方法使用辅助变量以及将变量赋值包含在(...)
中传递赋值的值通过的事实:
$obj = [pscustomobject] @{
Name = ($name = 'hello') # assign 'hello' to $name and pass the value through
Type = $name + 'world' # use the value assigned to $name above
}
$obj
输出到显示器上会打印:Name Type
---- ----
hello helloworld
参见:
Type = 'hello' + 'world'
呢? - Santiago Squarzonname
的内容。 - Santiago Squarzon