Việc ngừng hoạt động của Powershell khiến tôi phát điên.ArrayList Unrolling
Tôi có mã sau để truy xuất địa chỉ email từ người nhận trao đổi. Tôi đang sử dụng ArrayList vì nó được đề xuất bởi nhiều người khi bạn muốn khả năng loại bỏ các mục khỏi mảng.
$aliases = New-Object System.Collections.ArrayList
$smtpAddresses = (Get-Recipient $this.DN).EmailAddresses | ?{$_.Prefix.ToString() -eq 'smtp' }
foreach ($smtpAddress in $smtpAddresses) {
$aliases.Add($smtpAddress.SmtpAddress)
}
return $aliases
Giá trị của $ bí danh là đúng ở phần cuối của hàm (ví dụ: sẽ chứa địa chỉ email và x là kiểu ArrayList) nhưng sau khi trở về nó trở nên System.Object [] và có 2x mục. Có x Int32 được theo sau bởi x Strings (tức là {0, 1, bob @ here, bob @ there}). Tại sao điều này xảy ra và làm thế nào để giữ cho ArrayList của tôi còn nguyên vẹn? Tôi có sai khi sử dụng ArrayList không?
Hết sức tò mò, với tất cả các câu hỏi/vấn đề phát sinh từ việc kiểm tra PS, mục đích của nó là gì? Lợi ích lớn của powershell là bạn làm việc trực tiếp với các đối tượng thay vì dự đoán văn bản của họ, thật không may, tôi không bao giờ biết tôi đang làm việc với loại đối tượng nào - và ngay cả khi tôi kiểm tra, nó dường như không giữ được hình dạng của nó hơn một vài dòng mã.
- Chỉnh sửa Các hàm được gọi như là một phần của một PSObject
$get_aliases = { ... }
$obj | Add-Member -MemberType ScriptProperty -Name Aliases -Value $get_aliases -SecondValue $set_aliases
@bob Rất vui khi biết điều đó. Giữ nó với những khám phá của bạn! Phải mất một chút thời gian để làm cho tâm trí hoạt động trong chế độ * pipeline *. Khi điều đó xảy ra, bạn sẽ bắt đầu đánh giá cao những gì PowerShell đang làm cho bạn. –