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 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?
Câu trả lời:
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.
Trong a.ps1,
& .\b.ps1
cách bạn gọi các chương trình khác
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)
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