我喜歡以結構化的方式定義我的變量。然而,大多數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