Tôi đang cố gắng viết một hàm lấy nhiều đối số, có thể đến từ dòng lệnh hoặc từ đường dẫn. Các đối số có thể là các chuỗi hoặc các đối tượng thư mục. Ý tưởng là bất kỳ lời gọi sau đây nên làm việc:Làm cách nào để tạo một hàm chấp nhận nhiều loại đối số từ đường ống và dòng lệnh?
Test-VEnv '.\MyPath', '.\AnotherPath'
Test-VEnv (dir)
'MyPath', 'AnotherPath' | Test-VEnv
dir | Test-VEnv
Các mã sau đây gần công trình:
function Test-VEnv {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true, Position=0,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$true)]
[Alias('FullName')]
[String[]]$Path
)
process {
foreach ($P in $Path) {
...
}
}
}
Nó xử lý chuỗi cả từ các đường ống dẫn và các tham số lệnh, và xử lý các đối tượng thư mục từ đường ống (thông qua ValueFromPipelineByPropertyName và bí danh FullName). Nhưng nó không xử lý các đối tượng thư mục trên dòng lệnh, do đó,
dir | Where-Object { Test-VEnv $_ }
không thành công.
Có ai có thể cho tôi biết cách đạt được những gì tôi muốn không?
Tôi biết rằng ngay cả khi tôi có thể làm việc này, nó có thể không phải là một thiết kế đặc biệt tốt. Nhưng theo như tôi có thể nói, đó là cách xây dựng trong Test-Path hoạt động, vì vậy tôi muốn thử theo hành vi tiêu chuẩn trước khi tôi phát minh ra ...
OK, vậy điều bạn đang nói là chức năng của tôi hoạt động như đường dẫn kiểm tra. Lời xin lỗi của tôi, tôi dường như đã thử nghiệm của tôi một chút lộn xộn - cảm ơn vì đã làm rõ cho tôi. Vậy điều đó có nghĩa là không thể đạt được kết quả tôi muốn? (Ít nhất không phải không có kiểm tra loại rõ ràng lộn xộn trong mã) –
@PaulMoore Bạn đang mong đợi đường dẫn đầy đủ bị ràng buộc như là một chuỗi để '$ Path' bất kể đường ống được sử dụng hay không? –
@PaulMoore Hãy thử sử dụng 'PsPath' đây là những gì' Test-Path' sử dụng. Tôi đã cập nhật câu trả lời của mình với một số ví dụ. –