Làm cách nào để thực thi .ps1 từ tệp .ps1 khác?


14

Tôi có hai tệp PowerShell. a.ps1 và b.ps1.

Tại một điểm trung tâm trong a.ps1 tôi muốn bắt đầu thực thi mã trong b.ps1 và chấm dứt tập lệnh a.ps1.

Làm thế nào để làm điều đó xem xét rằng cả hai tập tin được đặt trong cùng một thư mục?


tại thời điểm này tôi đang sử dụng PS 'tệp đường dẫn' nhưng không thành công
GibboK

Câu trả lời:


4

Có ổn không nếu b.ps1 được thực thi trong quy trình Power Shell mới? Nếu vậy sau đây nên làm những gì bạn mô tả.

Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))

"Invoke-Expression" thực thi trong cùng một quy trình nhưng chờ kết thúc b.ps1.



2

tôi đã nhận được điều này từ một bài viết khác nhưng nó có thể áp dụng ở đây: cảm ơn ( /programming//users/3905079/briantist )

Đầu tiên, nếu bạn muốn thực hiện nhiều cuộc gọi trong một phiên tới một máy từ xa, trước tiên hãy tạo PSSession:

$session = New-PSSession -ComputerName $ComputerName

Sau đó sử dụng phiên đó trong tất cả các cuộc gọi tiếp theo:

Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code

} Sau đó đóng phiên khi bạn hoàn thành:

Remove-PSSession -Session $session

ngoài ra nếu bạn không biết chính xác kho kịch bản đó sẽ là gì nhưng biết kịch bản của bạn bắt đầu thì bạn có thể làm điều này:

$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)

(đó là của tôi)


0

Sử dụng biến ma thuật $ PSScriptRoot để chỉ thư mục hiện tại của bạn. Sau đó gọi tập lệnh B bằng ký hiệu ("Toán tử cuộc gọi"):

$script = $PSScriptRoot+"\b.ps1"
& $script

Nếu bạn muốn giữ các biến từ B trong phạm vi của A, bạn có thể chạy tập lệnh bằng toán tử tìm nguồn cung ứng Dot:

$script = $PSScriptRoot+"\b.ps1"
. $script
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.