我喜欢以结构化的方式定义我的变量。然而,大多数MSDN博客并没有这样做。
例如: [object]myObj = ...
这是PowerShell中所有对象的正确默认格式吗?
我喜欢以结构化的方式定义我的变量。然而,大多数MSDN博客并没有这样做。
例如: [object]myObj = ...
这是PowerShell中所有对象的正确默认格式吗?
使用 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
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'
但一旦您为变量赋值,该变量将自动获得新的推断类型:
$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'
自PowerShell 3以来,也可以将哈希表解析为自定义对象,例如:
[PSObject] $Piza = [PSCustomObject] @{
Ingredients = 4
}
如果您希望在对象中定义更详细的类型,可以使用New-Module的-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 *
}
$Piza.PSObject.TypeNames.Insert(0, 'Pizas.Macaroni')
您还可以像这样创建快速对象:
$myVar = "" | select column1, column2, column3
这将创建一个具有 3 个 NoteProperties 的对象,您可以像正常访问属性一样访问每个属性
$myVar.column1
注意,这里使用的是Selecte.System.String而不是System.Management.Automation.PSCustomObject。
仍然足够保留数据行、导出和访问数据单元格。
更新:更灵活的解决方案,仍然易于实现,可以创建如下的Hashtable。
$myVar2 = @{
column1=value1
column2=value2
column3=value3
}
这将创建一个类型为System.Collections.Hashtable的变量
带有一些不错的方法
敬礼 hermitagup
创建PSObject对象是从脚本语言访问所有对象的基础,并为cmdlet开发人员提供抽象。
它在不同版本的PowerShell中有所不同。
New-Object PSObject -Property [HashTable]
$Object = New-Object PSObject`
$Object | add-member Noteproperty LineNumber $LineNumber
$Object | add-member Noteproperty Date $TodayDate
如果我正确理解你的问题,你正在问
在PowerShell中,可以使用New-Object创建一个.Net对象的实例。像这样
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate2("http://stackoverflow.com/")
$ie.Visible = $true
$obj = New-Object PSObject -Property @{
Name = "Your Name"
Age = 30
}
当您使用"$obj"调用对象时
$obj
Age Name
--- ----
30 Your Name
[PSCustomObject] @{
Name = "Your Name"
Age = 30
}