Saya perlu memproses copy pekerjaan SVN dalam skrip PS, tapi saya mengalami kesulitan menyampaikan argumen ke fungsi. Inilah yang saya miliki:
function foo($arg1, $arg2)
{
echo $arg1
echo $arg2.FullName
}
echo "0: $($args[0])"
echo "1: $($args[1])"
$items = get-childitem $args[1]
$items | foreach-object -process {foo $args[0] $_}
Saya ingin lulus $arg[0]
sebagai $arg1
untuk foo
, dan $arg[1]
sebagai $arg2
. Namun, itu tidak berhasil, karena beberapa alasan $arg1
selalu kosong:
PS C:\Users\sbi> .\test.ps1 blah .\Dropbox
0: blah
1: .\Dropbox
C:\Users\sbi\Dropbox\Photos
C:\Users\sbi\Dropbox\Public
C:\Users\sbi\Dropbox\sbi
PS C:\Users\sbi>
Catatan: The "blah"
parameter tidak lulus sebagai $arg1
.
Saya benar-benar yakin ini adalah sesuatu yang lucu sederhana (saya baru saja memulai dengan melakukan PS dan masih merasa sangat canggung), tetapi saya telah membenturkan kepala saya terhadap ini selama lebih dari satu jam sekarang, dan saya tidak dapat menemukan apa pun.
powershell
sbi
sumber
sumber
Alasan bahwa $ args [0] tidak mengembalikan apa pun di foreach-object adalah $ args adalah variabel otomatis yang mengambil parameter yang tidak disebutkan namanya, tak tertandingi ke perintah dan objek-foreach adalah perintah baru. Tidak ada parameter yang tidak cocok untuk blok proses, jadi $ args [0] adalah nol.
Satu hal yang dapat membantu adalah skrip Anda dapat memiliki parameter, seperti fungsi.
Ketika Anda mulai ingin lebih banyak fungsionalitas dari parameter Anda, Anda mungkin ingin memeriksa posting blog yang saya tulis tentang perkembangan parameter dari $ args ke parameter lanjutan saat ini yang dapat kita gunakan sekarang.
sumber
Coba sesuatu seperti ini:
sumber
foreach
.