Saya memiliki dua file PowerShell. a.ps1 dan b.ps1.
Pada titik pusat di a.ps1 saya ingin memulai mengeksekusi kode dalam b.ps1 dan mengakhiri skrip a.ps1.
Bagaimana cara melakukannya mengingat kedua file tersebut berada di folder yang sama?
Saya memiliki dua file PowerShell. a.ps1 dan b.ps1.
Pada titik pusat di a.ps1 saya ingin memulai mengeksekusi kode dalam b.ps1 dan mengakhiri skrip a.ps1.
Bagaimana cara melakukannya mengingat kedua file tersebut berada di folder yang sama?
Jawaban:
Apakah boleh jika b.ps1 dijalankan dalam proses Power Shell baru? Jika demikian, berikut ini harus melakukan apa yang Anda gambarkan.
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))
"Invoke-Expression" dijalankan dalam proses yang sama tetapi menunggu penghentian b.ps1.
Dalam a.ps1,
& .\b.ps1
cara Anda menjalankan program lain
saya mendapatkan ini dari artikel yang berbeda tetapi dapat diterapkan di sini: terima kasih ( /programming//users/3905079/briantist )
Pertama, jika Anda ingin membuat beberapa panggilan dalam satu sesi ke mesin jarak jauh, pertama buat PSSession:
$session = New-PSSession -ComputerName $ComputerName
Kemudian gunakan sesi itu di semua panggilan berikutnya:
Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code
} Kemudian tutup sesi ketika Anda selesai:
Remove-PSSession -Session $session
juga jika Anda tidak tahu persis apa yang akan dibuat skrip tetapi ketahuilah kapan skrip Anda dimulai, Anda dapat melakukan ini:
$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)
(itu milikku)
Gunakan variabel ajaib $ PSScriptRoot untuk merujuk ke direktori Anda saat ini. Kemudian panggil skrip B dengan ampersand ("Panggil operator"):
$script = $PSScriptRoot+"\b.ps1"
& $script
Jika Anda ingin menjaga variabel dari B dalam lingkup A, Anda dapat menjalankan skrip menggunakan operator sumber Dot:
$script = $PSScriptRoot+"\b.ps1"
. $script