Câu hỏi đơn giản, có thể có ValidateScript
tạo thông báo lỗi tùy chỉnh khi thử nghiệm không thành công, như nói Test-Path
?Lỗi tùy chỉnh PowerShell từ tham số
Thay vì điều này:
Test-Folder: Không thể xác nhận lập luận trên tham số 'Thư mục'. Tập lệnh xác thực "Test-Path $ _ -Path Type Container" cho đối số có giá trị "blabla" không trả lại kết quả của True. Xác định lý do tại sao kịch bản xác nhận không thành công, và sau đó thử dấu phẩy và một lần nữa.
Nó sẽ được tốt đẹp để có nó báo cáo này thay vì trong biến $Error
:
Các 'Thư mục' không được tìm thấy, có thể có những vấn đề mạng?
Code:
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({Test-Path $_ -PathType Container})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Giải pháp 1:
tôi có thể loại bỏ các Mandatory=$true
và thay đổi nó như dưới đây. Nhưng điều này không cho tôi cú pháp chính xác Get-Help
và không thực hiện xác thực Test-Path
vì nó chỉ kiểm tra nếu tham số có mặt.
Function Test-Folder {
Param (
[parameter()]
[String]$Folder = $(throw "The $_ is not found, maybe there are network issues?")
)
Write-Host "The folder is: $Folder"
}
Giải pháp 2:
tôi thấy cách giải quyết này trên một blog, nhưng vấn đề là nó tạo ra 2 lỗi thay vì một.
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({
if (Test-Path $_ -PathType Container) {$true}
else {Throw "The $_ is not found, maybe there are network issues?"}})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Giải pháp 3:
Tôi cũng có thể thử để làm cho nó rõ ràng hơn bằng cách thêm phần nhận xét. Tuy nhiên, đây vẫn không phải là kết quả mong muốn vì lỗi cần phải đọc được đối với người dùng cuối.
Function Test-Folder {
Param (
[parameter(Mandatory=$true)]
[ValidateScript({
# The folder is not found, maybe there are network issues?
Test-Path $_ -PathType Container})]
[String]$Folder
)
Write-Host "The folder is: $Folder"
}
Đã cùng một vấn đề và tìm thấy bài đăng này. Tôi cũng tìm thấy những gì bạn gọi workaround 2. Không giống như bạn mặc dù tôi chỉ có một lỗi. Có lẽ phiên bản PowerShell đóng vai trò trong đó. 'M: \ Scripts \ Move-MaintenanceData.ps1: Không thể xác thực đối số trên tham số 'Nguồn'. C: \ werwer không xuất hiện như một folder.' hợp lệ – Matt
Bạn nói đúng, tôi không có vấn đề này nữa bây giờ. Vì vậy, nó phải phụ thuộc vào phiên bản PowerShell sử dụng. Đã giải quyết vấn đề :) – DarkLite1