首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell定义Powershell对象

Powershell定义Powershell对象
EN

Stack Overflow用户
提问于 2012-03-27 15:28:26
回答 6查看 7.4K关注 0票数 3

我喜欢以结构化的方式定义我的变量。然而,大多数MSDN博客并不这样做。

例如: objectmyObj = ...

这是Powershell中所有对象的正确默认格式吗?

EN

回答 6

Stack Overflow用户

发布于 2012-03-27 15:35:29

像这样使用PsObject

代码语言:javascript
复制
$o = new-Object PsObject -property @{Name='donald'; Kind='duck' }

您可以将哈希表作为-property参数的参数进行传递。您还可以创建空对象并在以后添加属性:

代码语言:javascript
复制
$o = New-Object PsObject
$o | Add-Member NoteProperty project myproj.csproj
$o | Add-Member NoteProperty Success $true

当然,您可以使用管道连接到Add-Member

代码语言:javascript
复制
$o = New-Object PsObject
# ...
$o | 
   Add-Member NoteProperty project myproj.csproj -pass |
   Add-Member NoteProperty Success $true
票数 9
EN

Stack Overflow用户

发布于 2012-03-27 22:33:05

如果我理解这个问题,你会问几件事:

  1. 您是否可以显式指定变量的类型?
  2. 如果您自己不指定,Powershell使用哪种类型?

Powershell当然会让您显式地指定类型,但它也会推断类型。请注意,因为所有类型都继承自System.Object,所以在组合声明/赋值语句中显式指定[object]没有我所能看到的值。类型系统仍然会推断出适当的子类型。例如:

代码语言:javascript
复制
$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类型的变量

代码语言:javascript
复制
Remove-Variable x
$x = new-object -TypeName Object
$x.GetType() # Returns 'Object'

...but赋值后,该变量将获得一个新的推断类型:

代码语言:javascript
复制
$x = 3
$x.GetType() # Returns 'Int32'

当您指定Object时,类型系统会很高兴地推断出Int32,而当推断出的类型不兼容时,显式类型就会取胜。例如:

代码语言:javascript
复制
$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的答案非常好。

票数 2
EN

Stack Overflow用户

发布于 2013-09-06 20:07:38

从Powershell3开始,人们还可以将HashTables解析为自定义对象,如:

代码语言:javascript
复制
[PSObject] $Piza = [PSCustomObject] @{
    Ingredients = 4
}

或者,如果您想在对象中定义更详细的类型,可以使用新建模块中的-AsCustomObject参数

代码语言:javascript
复制
[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中没有类这样的东西,所以您可以向您的对象添加自定义类名和命名空间,以便稍后查询(伪实例;)

代码语言:javascript
复制
$Piza.PSObject.TypeNames.Insert(0, 'Pizas.Macaroni')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9885072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档