我喜欢以结构化的方式定义我的变量。然而,大多数MSDN博客并不这样做。
例如: objectmyObj = ...
这是Powershell中所有对象的正确默认格式吗?
发布于 2012-03-27 15:35:29
像这样使用PsObject:
$o = new-Object PsObject -property @{Name='donald'; Kind='duck' }您可以将哈希表作为-property参数的参数进行传递。您还可以创建空对象并在以后添加属性:
$o = New-Object PsObject
$o | Add-Member NoteProperty project myproj.csproj
$o | Add-Member NoteProperty Success $true当然,您可以使用管道连接到Add-Member
$o = New-Object PsObject
# ...
$o |
Add-Member NoteProperty project myproj.csproj -pass |
Add-Member NoteProperty Success $true发布于 2012-03-27 22:33:05
如果我理解这个问题,你会问几件事:
Powershell当然会让您显式地指定类型,但它也会推断类型。请注意,因为所有类型都继承自System.Object,所以在组合声明/赋值语句中显式指定[object]没有我所能看到的值。类型系统仍然会推断出适当的子类型。例如:
$x = 3
$x.GetType() # Returns 'Int32'
Remove-Variable x
[object] $x = 3
$x.GetType() # Returns 'Int32'
Remove-Variable x
[valuetype] $x = 3
$x.GetType() # Returns 'Int32'
Remove-Variable x
[int] $x = 3
$x.GetType() # Returns 'Int32'如果将声明和赋值分开,则可以创建Object类型的变量
Remove-Variable x
$x = new-object -TypeName Object
$x.GetType() # Returns 'Object'...but赋值后,该变量将获得一个新的推断类型:
$x = 3
$x.GetType() # Returns 'Int32'当您指定Object时,类型系统会很高兴地推断出Int32,而当推断出的类型不兼容时,显式类型就会取胜。例如:
$x = 3 # Gets inferred type 'Int32'
[string] $x = 3 # Gets explicit type 'String'
$x = 'x' # Gets inferred type 'String'
[char] $x = 'x' # Gets explicit type 'Char'如果您的问题更适合于定义和使用自定义对象类型,Stej的答案非常好。
发布于 2013-09-06 20:07:38
从Powershell3开始,人们还可以将HashTables解析为自定义对象,如:
[PSObject] $Piza = [PSCustomObject] @{
Ingredients = 4
}或者,如果您想在对象中定义更详细的类型,可以使用新建模块中的-AsCustomObject参数
[PSObject] $Piza = New-Module -AsCustomObject -ScriptBlock {
[Guid]$id = [Guid]::NewGuid()
[String] $Name = 'Macaroni'
Function TestFunction() {}
# Dont forget to export your members and functions
# as this is built up as a module and stuffed into
# an object later
Export-ModuleMember -Function * -Variable *
}因为posh中没有类这样的东西,所以您可以向您的对象添加自定义类名和命名空间,以便稍后查询(伪实例;)
$Piza.PSObject.TypeNames.Insert(0, 'Pizas.Macaroni')https://stackoverflow.com/questions/9885072
复制相似问题