Saya ingin eksekusi panggilan untuk skrip myScript1.ps1 di dalam skrip myScript2.ps1 kedua di dalam Powershell ISE.
Kode berikut di dalam MyScript2.ps1, berfungsi dengan baik dari Powershell Administration, tetapi tidak berfungsi di dalam PowerShell ISE:
#Call myScript1 from myScript2
invoke-expression -Command .\myScript1.ps1
Saya mendapatkan kesalahan berikut ketika saya menjalankan MyScript2.ps1 dari PowerShell ISE:
Istilah '. \ MyScript1.ps1' tidak dikenali sebagai nama cmdlet, fungsi, file skrip, atau program yang dapat dioperasikan. Periksa ejaan nama, atau jika jalur disertakan, verifikasi jalur itu benar dan coba lagi.
sumber
Jalur MyScript1.ps1 saat ini tidak sama dengan myScript2.ps1. Anda bisa mendapatkan path folder MyScript2.ps1 dan menggabungkannya ke MyScript1.ps1 dan kemudian jalankan. Kedua skrip harus berada di lokasi yang sama.
sumber
Saya memanggil myScript1.ps1 dari myScript2.ps1.
Dengan asumsi kedua skrip berada di lokasi yang sama, pertama-tama dapatkan lokasi skrip dengan menggunakan perintah ini:
Dan, kemudian, tambahkan nama skrip yang ingin Anda panggil seperti ini:
Ini seharusnya bekerja.
sumber
& "$PSScriptRoot\myScript1.ps1"
sudah cukupSolusi satu baris:
sumber
& '.\MyScript1.ps'
jika skrip berada di direktori yang sama?Ini hanyalah info tambahan untuk jawaban agar dapat meneruskan argumen ke file lain
Di mana Anda mengharapkan pertengkaran
PrintName.ps1
Cara memanggil file
Jika Anda tidak memberikan input apa pun, maka defaultnya adalah "Joe" dan ini akan diteruskan sebagai argumen ke argumen printName dalam file PrintName.ps1 yang pada gilirannya akan mencetak string "Joe"
sumber
Anda mungkin sudah menemukan jawabannya, tetapi inilah yang saya lakukan.
Saya biasanya menempatkan baris ini di awal skrip instalasi saya:
Maka saya dapat menggunakan variabel $ PSScriptRoot sebagai lokasi skrip saat ini (path), seperti dalam contoh di bawah ini:
Dalam kasus Anda, Anda dapat mengganti
Mulai proses ... sejalan dengan
Invoke-Expression $ PSScriptRoot \ ScriptName.ps1
Anda dapat membaca lebih lanjut tentang $ MYINVOCATION dan $ PSScriptRoot variabel otomatis di situs Microsoft: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_about_automatic_variables
sumber
Untuk menjalankan dengan mudah file skrip dalam folder yang sama (atau subfolder dari) sebagai pemanggil Anda dapat menggunakan ini:
sumber
Saya punya masalah dengan ini. Saya tidak menggunakan
$MyInvocation
barang pintar untuk memperbaikinya. Jika Anda membuka ISE dengan mengklik kanan file skrip dan memilihedit
lalu buka skrip kedua dari dalam ISE, Anda dapat memohon satu dari yang lain dengan hanya menggunakan sintaks normal . \ Script.ps1 . Dugaan saya adalah bahwa ISE memiliki gagasan tentang folder saat ini dan membukanya seperti ini menetapkan folder saat ini ke folder yang berisi skrip. Ketika saya memohon satu skrip dari yang lain dalam penggunaan normal saya hanya menggunakan . \ Script.ps1 , IMO salah untuk memodifikasi skrip hanya untuk membuatnya bekerja di ISE dengan benar ...sumber
Saya memiliki masalah yang sama dan menyelesaikannya dengan cara ini.
Direktori kerja saya adalah folder skrip umum dan folder skrip serveral tertentu di root yang sama, saya perlu memanggil folder skrip tertentu (yang memanggil skrip umum dengan parameter masalah tertentu). Jadi direktori yang berfungsi seperti ini
Solutions1 dan Solutions2 memanggil folder PS1 dalam Script memuat parameter yang disimpan di ParameterForSolution. Jadi di PowerShell ISE saya menjalankan perintah ini
Dan kode di dalam Solution1.PS1 adalah:
sumber
Saya mengirimkan contoh saya untuk dipertimbangkan. Ini adalah bagaimana saya memanggil beberapa kode dari skrip pengontrol di alat yang saya buat. Script yang melakukan pekerjaan juga perlu menerima parameter juga, jadi contoh ini menunjukkan cara untuk melewatinya. Itu mengasumsikan skrip yang dipanggil berada di direktori yang sama dengan skrip controller (skrip membuat panggilan).
Di atas adalah skrip pengontrol yang menerima 3 parameter. Ini didefinisikan di blok param. Script controller kemudian memanggil script bernama Get-ZAEventLogData.ps1. Sebagai contoh, skrip ini juga menerima 3 parameter yang sama. Ketika skrip pengontrol memanggil skrip yang berfungsi, skrip perlu memanggilnya dan meneruskan parameternya. Di atas menunjukkan bagaimana saya melakukannya dengan menepuk.
sumber
Bagaimana Anda menjalankan skrip internal PowerShell di dalam skrip Anda?
Bagaimana Anda menggunakan skrip bawaan
Itu dijalankan oleh komputer Anda, secara otomatis memeriksa jalur skrip.
Demikian pula, saya dapat menjalankan skrip khusus saya dengan hanya memasukkan nama skrip di blok skrip
Lanjutkan ke baris perintah dan ketik powershell
Ini akan mengembalikan jalur ke file yang akan dieksekusi baris perintah PowerShell kami setiap kali Anda membuka aplikasi.
Ini akan terlihat seperti ini
Pergi ke Dokumen dan lihat apakah Anda sudah memiliki direktori WindowsPowerShell. Saya tidak, jadi
Kami sekarang telah membuat skrip yang akan diluncurkan setiap kali kami membuka Aplikasi PowerShell.
Alasan kami melakukannya adalah agar kami dapat menambahkan folder kami sendiri yang menampung semua skrip khusus kami. Mari kita buat folder itu dan saya akan beri nama "Bin" setelah direktori tempat Mac / Linux menyimpan skripnya.
Sekarang kami ingin direktori itu ditambahkan ke
$env:path
variabel kami setiap kali kami membuka aplikasi jadi kembali keWindowsPowerShell
Direktori danKemudian tambahkan ini
Sekarang shell akan secara otomatis menemukan perintah Anda, selama Anda menyimpan skrip Anda di direktori "Bin".
Luncurkan kembali PowerShell dan itu harus menjadi salah satu skrip pertama yang mengeksekusi.
Jalankan ini pada baris perintah setelah reload untuk melihat direktori baru Anda di variabel path Anda:
Sekarang kita dapat memanggil skrip kita dari baris perintah atau dari dalam skrip lain sesederhana ini:
Seperti yang Anda lihat, kita harus memanggil mereka dengan
.ps1
ekstensi sampai kita membuat alias untuk mereka. Jika kita ingin menjadi mewah.sumber