Di file batch saya, saya memanggil skrip PowerShell seperti ini:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Sekarang, saya ingin meneruskan parameter string ke START_DEV.ps1
. Misalkan parameternya adalah w=Dev
.
Bagaimana saya bisa melakukan ini?
powershell
batch-file
Karan
sumber
sumber
Jawaban:
Katakanlah Anda ingin meneruskan string
Dev
sebagai parameter, dari file batch Anda:powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
masukkan ke dalam kepala skrip PowerShell Anda:
$w = $args[0] # $w would be set to "Dev"
Ini jika Anda ingin menggunakan variabel built-in
$args
. Jika tidak:powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
dan di dalam kepala skrip PowerShell Anda:
param([string]$Environment)
Ini jika Anda menginginkan parameter bernama.
Anda mungkin juga tertarik untuk mengembalikan tingkat kesalahan:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
Tingkat kesalahan akan tersedia di dalam file batch sebagai
%errorlevel%
.sumber
Dengan asumsi skrip Anda adalah sesuatu seperti cuplikan di bawah ini dan bernama testargs.ps1
param ([string]$w) Write-Output $w
Anda dapat memanggil ini di baris perintah sebagai:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
Ini akan mencetak "Test String" (tanpa tanda kutip) di konsol. "Test String" menjadi nilai $ w dalam skrip.
sumber
Saat skrip dimuat, parameter apa pun yang diteruskan secara otomatis dimuat ke dalam variabel khusus
$args
. Anda dapat mereferensikannya di skrip Anda tanpa mendeklarasikannya terlebih dahulu.Sebagai contoh, buat file bernama
test.ps1
dan cukup buat variabel$args
di baris itu sendiri. Memanggil skrip seperti ini, menghasilkan keluaran berikut:PowerShell.exe -File test.ps1 a b c "Easy as one, two, three" a b c Easy as one, two, three
Sebagai rekomendasi umum, saat menjalankan skrip dengan memanggil PowerShell secara langsung, saya akan menyarankan untuk menggunakan
-File
opsi daripada secara implisit menjalankannya dengan&
- ini dapat membuat baris perintah sedikit lebih bersih, terutama jika Anda perlu berurusan dengan kutipan bertingkat.sumber
Tambahkan deklarasi parameter di bagian atas file ps1
test.ps1
param( # Our preferred encoding [parameter(Mandatory=$false)] [ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")] [string]$Encoding = "UTF8" ) write ("Encoding : {0}" -f $Encoding)
Hasil
sumber
Jawaban dari @Emiliano luar biasa. Anda juga dapat mengirimkan parameter bernama seperti:
powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
Perhatikan bahwa parameter berada di luar panggilan perintah, dan Anda akan menggunakan:
[parameter(Mandatory=$false)] [string]$NamedParam1, [parameter(Mandatory=$false)] [string]$NamedParam2
sumber