PowerShell betiği nasıl çalıştırılır


712

PowerShell betiğini nasıl çalıştırabilirim?

  • MyScript.ps1 adlı bir komut dosyası var
  • Gerekli tüm çerçeveleri yükledim
  • Bunu ayarlamak yürütme politikası şey
  • Bu MSDN yardım sayfasındaki talimatları izledim ve böyle çalıştırmaya çalışıyorum: powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1'(ile veya olmadan --noexit)

dosya adının çıktısı dışında hiçbir şey döndürmez.

Hata yok, mesaj yok, hiçbir şey yok. Oh, eklediğimde -noexit, aynı şey olur, ama PowerShell içinde kalıyorum ve manuel olarak çıkmak zorundayım.

.Ps1 dosyasının bir programı çalıştırması ve bu programın çıktısına bağlı olarak hata düzeyini döndürmesi gerekir. Ama oraya henüz ulaşamadığımdan eminim.

Neyi yanlış yapıyorum?


2
Başladığınız şekilde powershellbaşlatın cmd. Şimdi myscript.ps1betiği (powershell penceresinde) herhangi bir yürütülebilir dosya olarak yürütebilirsiniz , yani.\myscript.ps1
parasrish

Yanıtlar:


734
  1. Windows PowerShell'i başlatın ve PSkomut isteminin görünmesi için bir süre bekleyin
  2. Betiğin yaşadığı dizine gidin

    PS> cd C:\my_path\yada_yada\ (enter)
  3. Komut dosyasını yürütün:

    PS> .\run_import_script.ps1 (enter)

Neyi kaçırıyorum??

Veya: PowerShell betiğini şu şekilde çalıştırabilirsiniz cmd.exe:

powershell -noexit "& ""C:\my_path\yada_yada\run_import_script.ps1""" (enter)

bu blog yazısına göre burada

Ya da PowerShell betiğinizi C # uygulamanızdan bile çalıştırabilirsiniz :-)

C # uygulamanızdan zaman uyumsuz olarak PowerShell komut dosyalarını yürütme


19
Blog yayını bağlantınız yaptı. Kullanmak zorundayım powershell -noexit "& "C:\yada_yada\run_import_script.ps1"( üç çift ​​tırnak dikkat edin ) Gerçekten nedenini anlamıyorum, ama bu noktada gerçekten umrumda değil :) Çok teşekkürler!
Pekka

16
Tam olarak ne yapar "&?
BlueRaja - Danny Pflughoeft

16
Technet.microsoft.com/en-us/library/ee176949.aspx ' e göre ,' & 'şudur: "Bu dize değerini gerçekten yürütmek istiyorsanız (yani, yolu içine alınmış komut dosyasını çalıştırmak istiyorsanız çift ​​tırnak işareti) yolu Çağrı işleciyle (ve işareti) önceden girmeniz gerekir. "
Doug Dawson

29
yeni oluşturulan imzasız senaryom için powershell'in varsayılan yürütme kuralını atlayana kadar bunların hiçbiri benim için çalışmadı. Diğer şeylerin yanı sıra, bu powershell yönetici olarak yeniden başlatılması gerekiyordu. @LukePuplett ile tamamen aynı fikirdeyim - en basit kullanım durumunun 20 dakika googling ve futzing almasını sağlamak harika. Ve hata mesajları! Görünüşe göre bu adamlar 70'lerde IBM'de çalıştı.
Spike0xff

15
Aşağıdaki yorumda belirtildiği gibi, yürütme politikası atlanmalıdır. Burada ele alınmayan öğelerden biri, bir parametre içinden geçen bir komut satırından powershell betiğinin nasıl çalıştırılacağıdır. Bunu yapmak için: yazınpowershell -executionpolicy bypass ".\myscript.ps1 yadayadayada"
Jim Lahman

230

PowerShell 2.0 kullanıyorsanız -File, cmd.exe gibi başka bir ortamdan komut dosyası çağırmak için PowerShell.exe parametresini kullanın. Örneğin:

Powershell.exe -File C:\my_path\yada_yada\run_import_script.ps1

5
Böyle bir çağrıya parametre eklemenin bir yolu var mı?
Alexander Groß

11
Sadece komut dosyası dosya yolundan sonra argümanları izleyebilmelisiniz. PowerShell.exe kullanımından - [-File <filePath> <args>]
Keith Hill

", bu sistemde komut dosyalarının yürütülmesi devre dışı bırakıldığı için yüklenemiyor. Lütfen daha fazla ayrıntı için" imzalama hakkında "yardım alma" bölümüne bakın.
Pavel Vlasov

7
Sisteminizde PowerShell komut dosyası yürütmeyi etkinleştirmediyseniz, şu parametreyi ekleyin-ExecutionPolicy Bypass
Keith Hill

4
FYI bu da benim tecrübelerimde PowerShell 1.0 için çalışıyor (Windows 2012 Server)
Knocte

190

Bir komut dosyasını varsayılan komut dosyası yürütme ilkesini değiştirmeden çalıştırmak istiyorsanız, Windows PowerShell'i başlatırken bypass anahtarını kullanabilirsiniz .

powershell [-noexit] -executionpolicy bypass -File <Filename>

11
Ayrıca, -nologobaşlangıç ​​banner'ından kurtulma seçeneğini de ekleyin
swdev

73

Tür:

powershell -executionpolicy bypass -File .\Test.ps1

NOT: İşte Test.ps1PowerShell betiği.


powershell -executionpolicy bypass -File .\Test.ps1Mevcut çalışma dizininin Test.ps1
Yeow_Meng

29

Aynı sorunu yaşadım ve denedim ve denedim ... Sonunda kullandım:

powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"

Ve bu satırı bir toplu iş dosyasına koyun ve bu işe yarar.


22

Yalnızca PowerShell 1.0'a sahipseniz , bu hile yeterince iyi görünüyor:

powershell -command - < c:\mypath\myscript.ps1

Komut dosyasını PowerShell komut satırına bağlar.


3
Güvenlik ilkeleri komut dosyasının yürütülmesine izin vermediğinde yararlı numara.
Aron Lorincz

17

Çok kolay. Windows'da .ps1 dosyasını sağ tıklatın ve kabuk menüsünde PowerShell ile Çalıştır'ı tıklatın .


Bu, komut dosyası yürütme ilkesi ile yürütülmesini etkinleştirmek zorunda kalmadan bir komut dosyasını hızlı bir şekilde çalıştırmak için çalışır. Teşekkürler!
b01

Aradığım şey bu, teşekkürler!
Aamol

11

Cmd (BAT) dosyasını kullanarak:

@echo off
color 1F
echo.

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "PrepareEnvironment.ps1"

:EOF
echo Waiting seconds
timeout /t 10 /nobreak > NUL

Eğer ihtiyacın varsa Yönetici olarak çalıştırmanız :

  1. Komut istemine işaret eden bir kısayol yapın (Yönetici Komut İstemi adını verdim)
  2. Kısayolun özelliklerini açın ve Uyumluluk sekmesine gidin
  3. Ayrıcalık Düzeyi bölümünün altında, "Bu programı yönetici olarak çalıştır" seçeneğinin yanındaki onay kutusunun işaretli olduğundan emin olun.


10

Komut dosyanız .ps1uzantıyla adlandırılmışsa ve bir PowerShell penceresindeyseniz ./myscript.ps1(dosyanın çalışma dizininizde olduğunu varsayarak) çalışırsınız .

Zaten PowerShell sürüm 5.1 ile Windows 10'da bu benim için doğrudur ve bunu mümkün kılmak için bir şey yaptığımı sanmıyorum.


2
Bu soruya nasıl cevap veriyor?
Peter Mortensen

4
kesinlikle şu soruya cevap verir: powershell betiğini nasıl çalıştırırım? answer: powershell konsolunu başlat, sonra betiği çalıştır. kolay. basit. Linux üzerinde de çalışır.
Thufir

4
Bu kesinlikle soruyu cevaplıyor ve tam olarak aradığım şeydi. olarak myscript.ps1bir hata attı, değil çalışma yaptı, fakat ./o yürütme ediyor.
Jeff

7
  • Komut dosyasının yolunu, yani cmd'ye göre yol ayarını verin:

    $> . c:\program file\prog.ps1

  • PowerShell'in giriş noktası işlevini çalıştırın:

    Örneğin, $> add or entry_func or main


Komutlarınızı bir cmd isteminden çalıştırma: >$ . c:\program file\prog.ps1 '.' is not recognized as an internal or external command, operable program or batch file.ve>$ add or entry_func or main 'add' is not recognized as an internal or external command, operable program or batch file.
Suncat2000


1

-FileDosya adının önündeki parametreyi kullanın . Alıntılar PowerShell'in bir komut dizisi olduğunu düşünmesini sağlar.


1

İşe yarayan çok basit bir cevabım var:

  1. PowerShell'i yönetici modunda açma
  2. Çalıştırmak: set-executionpolicy unrestricted
  3. Normal bir PowerShell penceresi açın ve komut dosyanızı çalıştırın.

Bu iletiyi, hata iletisinin bir parçası olarak verilen bağlantıyı izleyerek buldum: Yürütme İlkeleri Hakkında

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.