Làm cách nào để chuyển các tham số cần thiết cho tập lệnh trong Powershell ISE?


75

Xem Tiêu đề.

Tôi đã chỉ định các tham số cần thiết trong phần đầu của tập lệnh:

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))

Khi tôi muốn gỡ lỗi tập lệnh với Powershell ISE: làm cách nào để điền các thông số này?

Câu trả lời:


79

Sử dụng ngăn lệnh. Mở tệp kịch bản trong trình soạn thảo ISE, đặt các điểm ngắt (F9). Sau đó, trong ngăn lệnh, gõ lệnh gọi tập lệnh này với các tham số bắt buộc. Tôi không nghĩ rằng có một cách khác (tích hợp sẵn) để làm điều này trong ISE.


7
Cách tiếp cận này không hiệu quả với tôi vì đường dẫn tệp của tôi có khoảng trắng trong đó, giải pháp là sử dụng "dấu &-function" theo cách sau: PS C: \ Windows> & ("c: \ my folder \ script.ps1" ) -myArg 123 -a AnotherArg abc
Emil G

1
Bạn thực sự có thể sử dụng đường dẫn tương đối:. \ Script.ps1
Ashraf Alam

28
  1. Mở tập lệnh (myscript.ps1) trong Windows Powershell ISE
  2. Nhấn F9vào biến bạn muốn kiểm tra (gỡ lỗi). Ví dụ: dòng thứ 2 trong mẫu bên dưới, nơi biến $ outputText đang được gán
  3. Trong cửa sổ shell cung cấp đường dẫn tương đối của script cùng với giá trị tham số. Ví dụ:. \ Myscript.ps1 "giá trị của tôi"
  4. Nhấn enter (bạn không cần nhấn F5)
  5. Bạn sẽ có thể thấy các điểm ngắt gỡ lỗi được đánh dấu bằng màu vàng. Đặt con trỏ của bạn vào biến mong muốn để kiểm tra giá trị hiện tại.

Một mẫu hiển thị gỡ lỗi PowerShell với ISE và tham số lệnh


2
Câu trả lời này khác với câu trả lời được chấp nhận như thế nào?
eckes

5
Suy nghĩ giải thích chi tiết hơn bằng hình ảnh minh họa sẽ hữu ích cho những người khác. Ví dụ: cung cấp vị trí tương đối (hoặc tuyệt đối) là bắt buộc, điều này đã không được cung cấp ngay từ đầu.
Ashraf Alam

16

Có một cách khác. Bạn có thể sử dụng $PSDefaultParameterValuesbiến tự động, tồn tại (kể từ v3) để cung cấp các đối số mặc định mới cho lệnh ghép ngắn và các hàm nâng cao (không hoạt động với các hàm bình thường). Tuy nhiên, nó hoạt động với các tập lệnh, ngay cả khi gỡ lỗi trong ISE. Bạn phải khai báo [CmdletBinding()]hoặc [Parameter()]giống như bạn làm cho một hàm nâng cao.

Vì vậy, ví dụ của bạn,

[CmdletBinding()]
param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))

bạn sẽ thực thi một cái gì đó như thế này trên ISE Prompt:

$PSDefaultParameterValues.add("ExampleScript.ps1:G_ARCHIVE","File-to-upload.txt")
$PSDefaultParameterValues.add("ExampleScript.ps1:G_LOGFILE","Example.log")

Bạn cũng có thể đặt giá trị tham số thành một khối tập lệnh sẽ tự động thực thi tại thời điểm chạy:

$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}

Biến là một bảng băm và áp dụng tất cả cú pháp chuẩn, ngoại trừ khóa phải có tên của tập lệnh (hoặc hàm nâng cao hoặc lệnh ghép ngắn) theo sau là dấu hai chấm rồi đến tên tham số. Bạn có thể đặt giá trị mặc định cho nhiều tập lệnh hoặc lệnh và nhiều tham số cho mỗi tập lệnh hoặc nhiều tham số (mỗi tham số là một mục nhập bảng mới).

Bằng cách này, bạn có thể nhấn F5để chạy script của mình như bình thường. Các tham số sẽ được lấy từ biến, vì vậy bạn không cần phải nhập bất cứ thứ gì vào.

Các trường hợp sử dụng khác cho $PSDefaultParameterValuescó thể là các tùy chỉnh, chẳng hạn như Get-History chỉ nhận được 10 mục nhập cuối cùng, trừ khi bạn chỉ định -Counttham số trong lệnh. Bởi vì các mục nhập chỉ tồn tại trong phiên hiện tại, bạn sẽ muốn thêm các tùy chỉnh vào hồ sơ của mình . Bạn có thể đọc thêm bằng cách gõ Get-Help about_Parameters_Default_Valuesvào lời nhắc hoặc xem thông tin tương tự trên TechNet .


Một ví dụ về khối tập lệnh khác. Bạn có thể có tập lệnh của mình tự động sử dụng tệp zip mới nhất. $PsDefaultParameterValues=["ExampleScript.ps1:G_ARCHIVE"]={(ls *.zip | sort lastwritetime | select -last 1).fullname}Loại này cực kỳ hữu ích khi bạn liên tục tạo các phiên bản mới của một số tập dữ liệu bên ngoài để kiểm tra và gỡ lỗi tập lệnh của mình.
PatrickFranchise

$ PSDefaultParameterValues.Item ("KEY") = "VALUE" là một lựa chọn thay thế khác
RichardOD

1
Nó chỉ hoạt động trong các tập lệnh khi các tham số được khai báo bằng trình [Parameter()]trang trí, điều này không đúng trong ví dụ @eckes.
Laurent CAPRANI

Bạn đúng. Tôi đã đề cập rằng nó cần phải là một chức năng nâng cao, nhưng không phải bạn phải làm như vậy với một tập lệnh.
PatrickFranchise

-2

Có một cách đơn giản hơn nhiều để đặt các Tham số cần thiết trong ISE:

Trước khi nhấn F5ISE, hãy đặt Thông số bạn cần. Tôi thường nhận xét Thông số tôi cần, ví dụ: # $ G_ARCHIVE = "C: \ Temp \ TestFile_001.txt"

Tôi chọn mọi thứ sau "#" và nhấn F8. Lần tới khi tôi gỡ lỗi tập lệnh với F5, Tham số được đặt thành giá trị mà tôi đang thử nghiệm, không cần phải chuyển Tham số qua dòng lệnh.

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.