PowerShell - Thay đổi tên PipelineVariable


2

Trong PowerShell, bạn có thể thay đổi tên của biến được sử dụng làm mục trong một khối lặp, chẳng hạn như:

dir -recurse *.snippet -OutVariable snippets

$snippets | Where-Object -PipelineVariable fn { $fn.Length -ge 6000 } | select FullName

Mã đó không hoạt động, nhưng bạn có ý tưởng. Tôi nghĩ rằng nó không hoạt động bởi vì -PipelineVariable đối số phải được chỉ định trong CmdLet trước đó.

Câu hỏi của tôi là, tôi sử dụng CmdLet nào để dẫn nội dung của $snippets?

tức là khi tôi vừa chạy $snippets Nó hoàn toàn chỉ đưa nội dung ra ngoài đường ống, nhưng CmdLet làm gì đây?

Tôi đã thử nhiều và dường như nhiều đầu ra mảng trên màn hình, nhưng khi được đưa vào Where-Object mệnh đề where không hoạt động, nó giống như nó nhìn vào thể hiện đối tượng mảng bên ngoài chứ không phải từng mục.

Luke

Câu trả lời:


2

Tôi muốn nói rằng nó chỉ có ý nghĩa để sử dụng -PipelineVariable nếu bạn có nhiều hơn một bước trong đường ống, để bảo vệ đối tượng khỏi các thành phần đường ống trước đó.

Dù sao: trong trường hợp này tôi sẽ sử dụng Write-Output:

Write-Output $snippets -PipelineVariable fn | Where-Object { $fn.Length -ge 6000 }

Write-Output "Gửi các đối tượng được chỉ định đến lệnh tiếp theo trong đường ống" - dễ dàng khi bạn biết. Gần nhất tôi có là Out-Default. Cảm ơn và tôi nêu quan điểm của bạn về PipelineVariable nó là một bài tập học tập hơn bất kỳ nhu cầu chính đáng nào.
Luke Puplett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.