[英]Powershell: How to dynamically build array or objects?
我想收集有關域中主機的一些信息,因此我嘗試編寫如下內容:
# declare array for storing final data
$servers_list = @()
#start with a list of servers and go through collecting the info
$servers | ForEach-Object {
$sys = Get-WmiObject Win32_computersystem -ComputerName $_
# create new custom object to store information
$server_obj = New-Object –TypeName PSObject
$server_obj | Add-Member –MemberType NoteProperty –Name Domain –Value $sys.Domain
# .... add all other relevant info in the same manner
# Add server object to the array
$servers_list += $server_obj
}
這段代碼的問題是我將對象的引用傳遞給數組而不是實際的對象。 所以當我的循環完成時,我最終得到一個數組,其中包含看起來都一樣的行:(
知道如何將實際對象傳遞到數組中,而不僅僅是對它的引用嗎? 另一個想法是動態聲明新對象而不是每次都使用$server_obj變量,但我也不知道如何做到這一點......
謝謝!!!
您可以構建一個對象數組並像這樣不斷向它們動態添加信息:
#This will be your array of objects
#In which we will keep adding objects from each computer
$Result = @()
#start with a list of servers and go through collecting the info
$servers | ForEach-Object {
$sys = Get-WmiObject Win32_computersystem -ComputerName $_
# create new custom object to keep adding store information to it
$Result += New-Object –TypeName PSObject -Property @{Domain = $sys.Domain;
Name = $sys.Name;
SystemType = $sys.SystemType
}
}
# Get back the objects
$Result
其中 Domain、Name 和 SystemType 是您要與對象關聯的屬性。
聽起來它正在傳遞一個引用,但我認為它不是作為引用傳遞的對象,而是屬性值。 有離散對象,但它們的屬性值都有相同的引用,因此它們看起來都一樣。 如果是這樣的話
$server_obj | Add-Member –MemberType NoteProperty –Name Domain –Value "$($sys.Domain)"
應該使值成為字符串,這是一種值類型並且不會改變。
你讓這變得比它應該的要難一些。 從查詢、csv 或列表中傳遞服務器名稱,然后遍歷它們。 從結果中選擇你想要的。
$info = "server1", "server2" | ForEach-Object{Get-WmiObject -Class win32_computersystem -ComputerName $_ } | Select-Object Domain, Name, Systemtype
$info[1].Domain will output domain.com
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.