Bagaimana cara menjalankan .ps1 dari file .ps1 lain?

14

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?

GibboK
sumber
saat ini saya menggunakan 'file path' PS tidak berhasil
GibboK

Jawaban:

4

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.

pengguna2543253
sumber
26

Dalam a.ps1,

& .\b.ps1

cara Anda menjalankan program lain

chingNotCHing
sumber
2

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)

Kelly Davis
sumber
0

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
Besi
sumber