Điểm:1

Làm cách nào để tôi tùy ý chỉ định tham số trong Powershell?

lá cờ cn

Tôi đang chuyển một số mã cũ từ AutoHotkey 'để cười' và nghĩ rằng tôi đã tình cờ phát hiện ra một tính năng ngoài ý muốn mà nó có...

Tôi muốn có thể làm điều gì đó 'như'

$ws = "Đã thu nhỏ"
$parameters = "/k dir F:\" 
bắt đầu quá trình cmd.exe ( $(if($parameters){"-argumentlist $parameters"}) )( $(if ($ws){"-windowystyle $ws"}) )

Nhưng nó không bao giờ 'nối' chúng thành một lệnh 'toàn diện' mà không có Mà còn ném tất cả chúng vào cmd.exe - Ví dụ, tôi ngây thơ hy vọng Powershell có thể 'bắt' chính WindowStyle và thu nhỏ cửa sổ (hiện tại, nó được chuyển thẳng tới cmd.exe mà bỏ qua nó).

Tôi biết tôi hơi điên, nhưng tôi cũng đang cố gắng tìm các thuật ngữ phù hợp để tìm kiếm - about_parsing không hữu ích và hàng tỷ ví dụ về các chuỗi nối cũng không tốt - tôi thực sự muốn Powershell bị lỏng lẻo đủ để cho phép tôi chuyển từ chuỗi sang tham số một cách linh hoạt, điều mà tôi đoán là đi ngược lại quyết định thiết kế có ý thức ở đâu đó...

Vì vậy, giải pháp thay thế là một loạt các câu lệnh if để chứa các hoán vị khác nhau của các tùy chọn...

if ($ws -and -(not $parameters)) {start-process cmd.exe -windowystyle $ws}
if ($parameters -and -(not $ws)) {start-process cmd.exe -argumentlist $parameters}
if ($parameters -and $ws) {bắt đầu xử lý cmd.exe -argumentlist $parameters -windowystyle $ws}
...buồn nôn

Trừ khi ai đó có bất kỳ ý tưởng tốt hơn?

Điểm:4
lá cờ tz

Một phần của vấn đề với ví dụ "thích" của bạn là nó nhóm mọi thứ theo sau cmd.exe và chuyển nó đến bắt đầu quá trình như một tham số vị trí thứ hai chuỗi đơn đó là Danh sách đối số. Vì vậy, bạn đang chạy hiệu quả này:

Start-Process -FilePath 'cmd.exe' -ArgumentList "-argumentlist /k dir F:\ -windowstyle Minimized"

bắn tung toé có thể giúp bạn một chút ở đây. Bạn có thể sử dụng bảng băm để tự động xây dựng tập hợp các tham số được gửi trước khi bạn thực sự gọi bắt đầu quá trình. Ví dụ:

# khởi tạo một hashtable mà chúng ta sẽ sử dụng để chia sẻ sau này
# có tất cả các thông số sẽ luôn được sử dụng.
# (nó cũng có thể để trống)
$startParams = @{
    FilePath = 'cmd.exe'
}

# thêm WindowStyle của bạn một cách có điều kiện
nếu ($ws) {
    $startParams.WindowStyle = $ws
}

# thêm ArgumentList của bạn một cách có điều kiện
nếu ($ tham số) {
    $startParams.ArgumentList = $parameters
}

# chạy chức năng với hashtable splatted
Bắt đầu quá trình @startParams
lá cờ cn
Huyền thoại của bạn - cảm ơn, tôi biết điều đó là có thể nhưng chưa nắm được cách khắc phục là gì. Hoạt động đẹp mắt. Tôi đã tìm ra $startParams.Wait = $true cũng hoạt động (đối với các tham số không thực sự có giá trị, nhưng là các công tắc)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.