Toplu iş dosyamda, PowerShell betiğini şu şekilde çağırıyorum:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Şimdi, bir dize parametresi geçirmek istiyorum START_DEV.ps1
. Diyelim ki parametre w=Dev
.
Bunu nasıl yapabilirim?
Toplu iş dosyamda, PowerShell betiğini şu şekilde çağırıyorum:
powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"
Şimdi, bir dize parametresi geçirmek istiyorum START_DEV.ps1
. Diyelim ki parametre w=Dev
.
Bunu nasıl yapabilirim?
Yanıtlar:
Dize Dev
, toplu iş dosyanızdan bir parametre olarak iletmek istediğinizi varsayalım :
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev"
powershell script başlığınızın içine koyun:
$w = $args[0] # $w would be set to "Dev"
Bu, yerleşik değişkeni kullanmak istiyorsanız $args
. Aksi takdirde:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 -Environment \"Dev\""
ve powershell komut dosyası kafanızın içinde:
param([string]$Environment)
Bu, adlandırılmış bir parametre istiyorsanız.
Hata düzeyini döndürmek de ilginizi çekebilir:
powershell -command "G:\Karan\PowerShell_Scripts\START_DEV.ps1 Dev; exit $LASTEXITCODE"
Hata düzeyi, toplu iş dosyasında şu şekilde bulunacaktır %errorlevel%
.
Komut dosyanızın aşağıdaki kod parçacığı gibi olduğunu ve testargs.ps1 olarak adlandırıldığını varsayarsak
param ([string]$w)
Write-Output $w
Bunu komut satırında şu şekilde çağırabilirsiniz:
PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"
Bu, konsolda "Test Dizesi" (tırnak işaretleri olmadan) yazdıracaktır. "Test Dizesi", koddaki $ w'nin değeri olur.
Bir komut dosyası yüklendiğinde, aktarılan tüm parametreler otomatik olarak özel değişkenlere yüklenir $args
. İlk önce bildirmeden komut dosyanızda buna başvurabilirsiniz.
Örnek olarak, adlı bir dosya oluşturun test.ps1
ve değişkeni $args
bir satırda tek başına bulundurun. Betiği bu şekilde çağırmak aşağıdaki çıktıyı üretir:
PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
a
b
c
Easy as one, two, three
Genel bir öneri olarak, PowerShell'i doğrudan çağırarak bir betiği çağırırken, -File
seçeneğiyle örtük olarak çağırmak yerine seçeneğin kullanılmasını öneririm &
- özellikle iç içe geçmiş tırnaklarla uğraşmanız gerekiyorsa komut satırını biraz daha temiz hale getirebilir.
Ps1 dosyasının en üstüne parametre bildirimini ekleyin
param(
# Our preferred encoding
[parameter(Mandatory=$false)]
[ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
[string]$Encoding = "UTF8"
)
write ("Encoding : {0}" -f $Encoding)
C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII
@Emiliano'nun cevabı mükemmel. Ayrıca aşağıdaki gibi adlandırılmış parametreleri de iletebilirsiniz:
powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"
Parametrelerin komut çağrısının dışında olduğunu ve şunları kullanacağınızı unutmayın:
[parameter(Mandatory=$false)]
[string]$NamedParam1,
[parameter(Mandatory=$false)]
[string]$NamedParam2