2013-03-13 31 views
6

Có thể tạo đối tượng tùy chỉnh (PSObject) và xác định thuộc tính của nó trước và sau trong thực thi chương trình, chúng tôi tiếp tục thêm mảng giá trị vào đối tượng.Tạo PSObject tùy chỉnh PowerShell 2.0

Ví dụ:

$c = @() 

$c = New-Object PSObject 
$c | Add-Member -type NoteProperty -name Name 
$c | Add-Member -type NoteProperty -name Gender 
$c | Add-Member -type NoteProperty -name Age 


$c | Add-Member -type NoteProperty -name Name -value "John" 
$c | Add-Member -type NoteProperty -name Gender -value "Male" 
$c | Add-Member -type NoteProperty -name Age -value "30" 

Cảm ơn trước cho bất kỳ khách hàng tiềm năng hoặc lời khuyên nào.

+1

Tôi không chắc chắn lý do tại sao bạn đặt $ c thành một mảng trống trước khi đặt nó thành PSObject mới. Mảng đã bị mất với nhiệm vụ thứ hai. –

+0

Tôi có một tập lệnh thực hiện một danh sách kiểm tra cho một bộ máy tính. Do đó tôi muốn ghi lại trạng thái của từng kiểm tra cho mỗi máy tính bằng cách tạo một đối tượng và đặt trạng thái của mỗi máy tính trong một mảng. Kiểm tra đầu tiên là kiểm tra kết nối cho máy tính. Tôi muốn hoàn thành tất cả các kiểm tra cho máy tính và sau đó ghi lại trạng thái. – Rajiv

+1

Thực tế thú vị: Được phép đánh dấu câu trả lời là chính xác để các câu hỏi bị đóng. :-) –

Trả lời

16

Tôi không chắc chắn tôi sẽ theo dõi. Bạn có muốn một mảng các đối tượng với các thuộc tính được chỉ định của bạn không? Bởi vì mẫu của bạn đầu tiên tạo ra một mảng, sau đó bạn ghi đè lên một đối tượng duy nhất. Vì vậy, bạn bị mất mảng của bạn.

Bạn có thể tạo đối tượng bằng cách sử dụng new-object và chỉ định các thuộc tính có giá trị dưới dạng hàm bắt đầu trong thông số -Property. Như thế này:

$c = New-Object psobject -Property @{ 
    Name = "John" 
    Gender = "Male" 
    Age = 30 
} 

Để làm cho một mảng trong số họ, bạn có thể sử dụng:

$myarray = @() 

$myarray += New-Object psobject -Property @{ 
    Name = "John" 
    Gender = "Male" 
    Age = 30 
} 

Nếu bạn có nhiều bài kiểm tra mà bạn chạy từng người một, bạn có thể chạy các bài kiểm tra trong một hàm kiểm tra và tạo ra một "resultobject", sau đó bạn thu thập nó:

$myresults = @() 

function mytests($computer) { 
    #Test connection 
    $online = Test-Connection $computer 

    #Get buildnumber 
    $build = (Get-WmiObject win32_operatingsystem -ComputerName $computer).buildnumber 

    #other tests 

    #output results 
    New-Object psobject -Property @{ 
     Online = $online 
     WinBuild = $build 
    } 
} 

$myresults += mytests -computer "mycomputername" 
+1

+1 cho nhận xét trong câu trả lời đã xóa của tôi :) –

+0

là quy ước để chỉ định giá trị thuộc tính cho phần tử mảng đầu tiên? Ý tôi là, chúng ta không thể khai báo cấu trúc mảng (với tên cột) và sau đó thêm phần tử mảng vào khóa học đúng. Có bắt buộc phải đặt phần tử mảng cùng với Khởi tạo PSObject không? – Rajiv

+1

Bạn có nghĩa là nếu bạn phải thêm nó vào mảng khi bạn tạo nó? Bởi vì bạn không. Bạn có thể sử dụng '$ myobjname = new-object .....' và sau đó thêm nó sau '$ myarray + = $ obj'. Trong hầu hết các trường hợp, bạn biết các giá trị cho đối tượng khi bạn cần tạo nó, vì vậy sẽ dễ dàng hơn khi làm tất cả cùng nhau –

2

Yeah, vì vậy tôi biết đây là một bài cũ nhưng Don Jones đã làm một cái gì đó như thế này:

$props = @{ 
    Name = "John" 
    Gender = "Male" 
    Age = 30 
} 

$c = New-Object PSObject -Property $props 

Bạn có thể chạy sau để xem Properties và Values ​​đối tượng mới:

c$ | Get-Member 

Tôi nghĩ rằng đó là những gì bạn đang tìm kiếm.

+1

Đây chính là giải pháp giống như câu trả lời cũ hơn. –