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.exeBu 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 offPowershell.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\ -VerboseBatch dosyası copy.bat oluşturduk ve içeriği aşağıdaki gibidir.
@echo off
PowerShell.exe -ExecutionPolicy Unrestricted -File C:\temp\TestPS.ps1Copy.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 WOrldBir 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 -VerboseYukarı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.











