我喜欢以结构化的方式定义我的变量。然而,大多数MSDN博客不这样做。Powershell定义PowerShell对象
例如: [对象] MyObj中= ...
这是对在PowerShell中的所有对象的正确默认格式?
我喜欢以结构化的方式定义我的变量。然而,大多数MSDN博客不这样做。Powershell定义PowerShell对象
例如: [对象] 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
如果我理解这个问题,你问一对夫妇的事情:
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'
...但一旦你分配一个值,该变量获得一个新的推断类型反正:
$x = 3
$x.GetType() # Returns 'Int32'
虽然类型系统将愉快地推断Int32
当您指定Object
,明确的类型取胜当推断类型WOU ld不兼容。例如:
$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的答案是优秀的。
在您的示例中,你并没有真正分解声明和任务。 $ x = new-object -TypeName对象是一个赋值。而$ x.GetType()返回值的类型。 – mcoolive 2014-12-19 13:03:42
如果我正确地理解你的问题,你问
在powershell中,它能够使用New-Object创建.Net对象的实例。像这样
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate2("http://stackoverflow.com/")
$ie.Visible = $true
上面的代码创建一个com对象,它可以导航你的ie到stackoverflow。
而且,如果你想创建自己的对象,PSObject将是你的选择。像下面
$obj = New-Object PSObject -Property @{
Name = "Your Name"
Age = 30
}
当您使用“$目标文件”
$obj
Age Name
--- ----
30 Your Name
如果您在使用PowerShell 3.0调用对象,你可以用更少的输入得到相同的结果类似下面
[PSCustomObject] @{
Name = "Your Name"
Age = 30
}
由于Powershell 3还可以解析HashTable到 自定义对象,如:
[PSObject] $Piza = [PSCustomObject] @{
Ingredients = 4
}
或者,如果你想在你的对象来定义更详细的类型 你可以从New-模块
[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 *
}
使用-AsCustomObject参数作为没有的东西在豪华类,您可以添加自定义 类名和命名空间到你的对象 以后可以查询(伪实例;)
$Piza.PSObject.TypeNames.Insert(0, 'Pizas.Macaroni')
创作PSObject对象是从脚本语言访问所有对象的基础,提供了cmdlet的开发商和抽象
它不同于在不同版本的PowerShell ..
新物体PSObject -Property [哈希表]
$Object = New-Object PSObject`
$Object | add-member Noteproperty LineNumber $LineNumber
$Object | add-member Noteproperty Date $TodayDate
您还可以创建这样的快速的对象:
$ myVar =“”|选择列1,列2,栏3
这将创建对象,具有3个NoteProperties ,你必须访问的每个属性正常的基础上,像
$ myVar.column1
附:考虑到这是Selecte.System.String而不是System.Management.Automation.PSCustomObject。
仍然足以保存数据行,导出,访问数据单元。
更新:更灵活的解决方案,仍然容易实现将Hashtable创建如下。
$ myVar2 = @ {
COLUMN1 =值1
列2 =值2
栏3 =值3
}
这将创建型System.Collections.Hashtable
的变量有一些不错的方法
问候 hermitagup
快捷方式:$ O = [PSCustomObject] @ {名称= '唐纳德' ; Kind ='Duck'} 从'New Conversion'部分下的Powershell v3(blogs.msdn.com/b/powershell/archive/2012/06/14/new-v3-language-features.aspx)开始 – tkokasih 2014-03-24 00:03:03