PowerShell Toplu Dosya | Toplu iş dosyası PowerShell'de nasıl çalışır?


PowerShell Toplu Dosyasının Tanımı

Toplu iş dosyası, Windows İşletim Sisteminde veya DOS'ta aynı anda tek bir komutu veya birden fazla komutu çalıştırabilen ve yerel veya uzak makinelerde bir dizi görevi yürütebilen bir dizi komut veya komut dosyasıdır ve bir toplu iş dosyasıdır. Yarasa veya. Cmd uzantısı. PowerShell ve Batch farklı diller olmasına rağmen her ikisi de birbirine entegre edilebilir ve birbirlerinin görevlerini çağırıp yürütmelerine yardımcı olur.

Sözdizimi:

Batch dosyasından PowerShell betiğini çağırmak için Batch dosyasında aşağıdaki sözdizimini kullanabiliriz.

Powershell.exe -ExecutionPolicy Unrestricted -command "PowerShell file path"

Toplu iş dosyasını PowerShell betiğinden çağırmak için,

Start-Process -FilePath “BatchFilePath”

Komut isteminin yürütülmesini kontrol etmek için,

Start-Process "cmd.exe " "/c Batch File Path"

Toplu iş dosyası PowerShell'de nasıl çalışır?

Toplu dosyalar, komut istemine veya cmd.exe'ye ayrı ayrı yazdığımız komutlar dizisidir. PowerShell'den farklı bir sözdizimi kullanılarak yazılırlar ve Windows İşletim sisteminde çalışırlar.

PowerShell'den cmd.exe'yi basitçe çağırmak için aşağıdaki komutu kullanabiliriz.

Start-Process -FilePath cmd.exe

Bu komut, PowerShell konsolundan yeni komut istemi penceresi açacaktır.

-NoNewWindow parametresini kullanırsanız PowerShell cmd.exe işlemini yalnızca PowerShell konsolu içerisinde başlatacak ve aşağıda gösterildiği gibi PowerShell konsolu cmd konsoluna dönüştürülecektir.

Start-Process -FilePath cmd.exe -NoNewWindow

Çıktı:

Benzer şekilde toplu iş dosyası elimizde varsa bunu PowerShell konsolundan çağırabiliriz.
Örneğin, aşağıdaki BatchFile içeriğine sahibiz ve dosya adı TestBatch.bat olarak adlandırılıyor ve toplu iş dosyasını kullanarak çalıştırmamız gerekiyor. Daha sonra PowerShell,

TestBatch.bat dosyası:

@echo off
echo Hello WOrld
pause

Toplu dosyayı çağırmak için

Start-Process -FilePath "C:\Temp\TestBatch.bat"

Çıktı:

-NoNewWindow Parametresi ile aynı konsolda.

Start-Process -FilePath "C:\Temp\TestBatch.bat" -NoNewWindow

Çıktı:

Toplu iş dosyasından PowerShell dosyasını nasıl çağıracağımıza başlamadan önce, komut istemi penceresinden PowerShell'i nasıl çağıracağımızı kullanacağız.

PowerShell makineye yüklendiğinde ortam değişkenine bir giriş oluşturur, böylece hem PowerShell hem de PowerShell çekirdek sürümlerini cmd'den çalıştırabilirsiniz.

Örneğin,

PowerShell'i cmd'den çağırmak için aşağıda gösterildiği gibi PowerShell.exe yazmanız yeterlidir.

PowerShell.exe

Çıktı:

PowerShell çekirdek sürümünü (6.0 veya üzeri) çağırmak için Pwsh.exe yazın.

pwsh.exe

Çıktı:

Powershell sürümleri kurulu ve doğru şekilde ayarlanmışsa PowerShell işlemini cmd'den bu şekilde çağırabiliriz.

Bir sonraki adımda PowerShell komutunu komut isteminden çalıştıracağız.

Powershell.exe -ExecutionPolicy Unrestricted -Command "Write-Output 'Hello from CMD'"

Çıktı:

Yukarıdaki örnekte, PowerShell'i çağırmak için PowerShell.exe'yi kullanıyoruz, yürütme politikasını UnRestricted olarak ayarlıyoruz, böylece komutu çalıştırdığımızda engellememesi gerekiyor ve üçüncü olarak çıktıyı yazmak için -Command parametresini kullanıyoruz.
Şimdi yukarıdakilere sahibiz. Bahsedilen komut, bu komutu bir toplu iş dosyasına (TestPSBatch.Bat) kaydedip cmd penceresinden çalıştırabiliriz ve çalışması gerekir.

TestPSBatch.Bat dosyası:

@echo off
Powershell.exe -ExecutionPolicy Unrestricted -Command "Write-
Output 'Hello from CMD'"

Toplu iş dosyası yürütülüyor,

C:\Temp\TestPSBatch.bat

Çıktı:

Ayrıca bu toplu iş dosyasını o konumdan üzerine çift tıklayarak doğrudan çalıştırabilirsiniz.
Yukarıdaki örnekte, bir toplu iş dosyasında PowerShell yerine Pwsh kullanırsak o zaman da çalışması gerekir.

Örnekler

PowerShell Toplu Dosya örneklerini tartışalım.

Örnek 1: Batch dosyasından PowerShell betiğini çağırmak.

Bu zaten tartışıldı, bir Batch dosyasından bir PowerShell betiğini çağırmak için aşağıdaki örneği kullanabiliriz. Dosyaları kaynaktan hedefe kopyalayan bir PS betiğimiz olduğunu ve bunu toplu iş dosyasını kullanarak yürütmemiz gerektiğini varsayalım.
Bu, bir toplu iş dosyası kullanarak yürütmemiz gereken TestPS.ps1 içeriğidir.

Copy-Item C:\Temp\envvariables.csv -Destination C:\Temp\Test\ -Verbose

Batch dosyası copy.bat oluşturduk ve içeriği aşağıdaki gibidir.

@echo off
PowerShell.exe -ExecutionPolicy Unrestricted -File C:\temp\TestPS.ps1

Copy.Bat'i çalıştırdığımızda çıktının aşağıdaki gibi görünmesi gerekiyor.

Örnek 2: Toplu komut dosyasını PowerShell betiğinden çağırma

Bu örnek, toplu iş dosyasını PowerShell'den nasıl arayabileceğimizi gösterir.

Testbatch.bat dosyası.

@echo off
echo Hello WOrld

Bir toplu iş dosyasını çalıştırmak için PowerShell betiğini çalıştırmamız gerekiyor.

Start-Process -FilePath C:\Temp\TestBatch.bat -NoNewWindow

Çıktı:

Testps.ps1 dosyasını çalıştırdıktan sonra,

Toplu komut dosyasını yönetici olarak çalıştırmak için -Verb parametresini kullanın.

Start-Process -FilePath C:\Temp\TestBatch.bat -Verb Runas

Örnek 3: PowerShell komutunu toplu iş dosyasından çalıştırma

Örneğin1, PowerShell komutunu çalıştırmak için cmd'deki doğrudan toplu iş dosyası içeriğini de kullanabiliriz. Ancak tek satırlık bir komuttur. Diyelim ki cmd penceresinden birden fazla PowerShell komutunu çalıştırmak istiyorsak bu da mümkün.

Bu örnekte, aşağıda gösterildiği gibi PowerShell komutunu çalıştıran Batch dosyasını kullanarak dosyayı kopyalayıp servisi yeniden başlatacağız ve not defteri işlemini sonlandıracağız.

PowerShell.exe -executionpolicy Unrestricted Invoke-command -scriptblock { Copy-Item C:\temp\10vms.csv -Destination C:\Test1 -Verbose ; Stop-Service Spooler -Verbose ; Stop-Process -Name "Notepad" -Force -Verbose }

Çıktı:

Bir komutu uzaktan çalıştırmak için aşağıda gösterildiği gibi bilgisayar adını sağlamamız gerekir. Uzak sunucu adı TestMachine üzerindeki C:\CMDDir yolunda yeni bir dizin oluşturacaktır.

PowerShell.exe -executionpolicy unrestricted Invoke-Command -ComputerName TestMachine -scriptblock {New-Item C:\cmddir}

Örnek 4: Toplu Komutları PowerShell'den Çalıştırma

Toplu komutları PowerShell'den çalıştırmak için, daha önce açıklandığı gibi sunucuda bir cmd komutunu çalıştıran İşlem Başlat cmdlet'ini kullanabiliriz.

Start-Process "cmd.exe" '/c mkdir C:\cmddir' -NoNewWindow -Verbose

Yukarıdaki komut, yerel sunucuda cmddir dizinini oluşturur.

Çözüm

PowerShell ve Batch dosyalarının bir kombinasyonu çok faydalıdır çünkü çoğu zaman yeni kullanıcılar, toplu iş dosyası kolayca yürütülebildiğinde PowerShell'in nasıl çalıştırılacağının farkında değildir. PowerShell toplu dosyaları, PowerShell uzantısını doğrudan desteklemeyen ancak toplu iş dosyalarını destekleyen BladeLogic gibi Üçüncü taraf yazılımlarla da kullanışlıdır. Böyle bir durumda PowerShell komutlarını uzaktan yürütmek için toplu iş çalıştırabiliriz.

İlgili makaleler