PowerShellからPowerShellを呼び出す方法

このQ&Aのポイント
  • PowerShellからPowerShellを呼び出す方法は、バッチファイルと同じように簡単に実現することができます。具体的な手順としては、PowerShellスクリプトファイルで呼び出したいPowerShellスクリプトを実行するだけです。
  • バッチファイルでの例でいうと、「bbb.bat」が「aaa.bat」を呼び出して結果をファイルに保存する場合、PowerShellでの同様の動作は、「bbb.ps1」が「aaa.ps1」を呼び出して結果をファイルに保存することです。
  • 具体的な書き方としては、PowerShellスクリプト内で「Start-Process」コマンドレットを使用し、呼び出したいPowerShellスクリプトを実行するように指定します。また、ファイルに保存する場合は、「Out-File」コマンドレットを使用します。
回答を見る
  • ベストアンサー

PowerShellからPowerShellを呼び出す方法

PowerShellからPowerShellを呼び出す方法 次のバッチファイルと同等の事をPowerShellで行う方法を教えて下さい。 下記のような非常に簡易的なバッチファイルがあるとします。 ■ aaa.bat ■ echo test ■ aaa.bat ■ ■ bbb.bat ■ aaa.bat > aaa.log ■ bbb.bat ■ ■ コマンドプロンプト ■ cmd> aaa.bat ・・・ 下に「test」と出力される test cmd> bbb.bat ・・・ ファイルaaa.logに「test」と出力される ■ コマンドプロンプト ■ 同じ事をPowerShellでするとすれば ■ aaa.ps1 ■ echo "test" ■ aaa.ps1 ■ ■ PowerShellの画面から ■ PS > ./aaa.ps1 ・・・ 下に「test」と出力される test PS > ./bbb.ps1 ・・・ ファイルaaa.logに「test」と出力される ■ PowerShellの画面から ■ この時の「bbb.ps1」はどのようになりますか?

  • ngwave
  • お礼率65% (240/366)

質問者が選んだベストアンサー

  • ベストアンサー
  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.2

回答番号:No.1 お礼へのアドバイスです。 >「キックして結果を待は待たずに次の処理をする」 >などのバリエーションは可能でしょうか? 使いこなせていませんがPowerShell 2.0ではバックグラウンドジョブが実現されました。下記の@ITの記事などが参考になると思います。 http://www.atmarkit.co.jp/fwin2k/winsv2008r2/03powershell/03powershell_03.html Windows7で Start-Job, Get-Job, Receive-Jobが働くことを確認しました。

その他の回答 (1)

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.1

PowerShellではコマンドプロンプトと異なり自動的にはカレントフォルダが検索されません。ですから「bbb.ps1」からカレントフォルダの「aaa.ps1」を呼び出したい場合、カレントフォルダを示す .\ を付ける必要があります。 .\aaa.ps1 > aaa.log 私の持っている参考書では、環境変数Pathにカレントフォルダを示す .\ を追加することを推奨しています。

ngwave
質問者

お礼

有難うございます。 パスを付けないと実行しないのはlinuxのようなノリですね。 でも、それだけだと上手く呼び出せない事があり、試しにpowershellと書いてやると動きました。 ■ bbb.ps1 ■ powershell ./bbb.ps1 ■ bbb.ps1 ■ でも、これって普通の書き方なのでしょうか? また、 「呼び出して結果を待つ」まではこれで行けていますが、 「待った後、戻り値を受け取る」 あるいは 「待った後、ステータスを拾う」 さらには、 「キックして結果を待は待たずに次の処理をする」 などのバリエーションは可能でしょうか?

関連するQ&A

  • コマンドプロンプトのcallと遅延展開

    こんにちは。 コマンドプロンプトにおいて、call と !・・・! による環境変数の遅延展開について、 1つ疑問に思う事がありましたので、質問させて頂きました。 まず、以下のようなバッチスクリプトtest.batを作成しました。 -------------------------------------------------------- @echo off setlocal setlocal enabledelayedexpansion set aaa=XXX^|cat echo 1:!aaa! call echo 2:!aaa! echo 3:%aaa% call echo 4:%aaa% --------------------------------------------------------- これを実行した結果、以下のようになりました。 --------------------------------------------------------- C:\Users\kei >test.bat 1:XXX|cat 3:XXX 4:XXX --------------------------------------------------------- callは、それ以降のコマンドラインを2度解析するだけなのに、 なぜ、call echo 2:!aaa! の行を実行した時に、何も出力されないのでしょうか?

  • VimからPowerShellを立ち上げる方法

    OSはWindows7を使用しているのですが、Vimのコマンドモードで「:!」に続けてコマンドを入力すると、コマンドプロンプトが立ち上がると思うのですが、このとき、PowerShellではなくcmd.exeが立ち上がります。 そこでお伺いしたいのですが、上記の操作手順においてcmd.exeではなくPowerShellを立ち上がらせることはできないものでしょうか?EmacsについてはPowerShellの立ち上がらせ方が発見できたのですが、私の調べ方ではVimについては見つけられませんでした。 ヒントでも結構です。何かご存知でしたらお教えください。よろしくお願いします。

  • powershellでの改行方法について

    テキストファイルの特定の文字列の後の改行コードをカンマに変換するbatファイルを作成しようと思っているのですがうまくいきません。 DOSで用意されているコマンドだけでは実現は難しいと思って、powershellコマンドを使っています。 実現は一つのbatファイルで行いたいのですが、どなたか実現方法を知っていましたら教えていただけませんでしょうか。 [JIKKO.bat] powershell.exe "$(Get-Content TEST.txt) -replace '★`n',','" >TEST_RESULT.txt [TEST.txt] あああ,いいい,ううう★ えええ かかか,ききき,くくく★ けけけ [TEST_RESULT.txtの理想] あああ,いいい,ううう,えええ かかか,ききき,くくく,けけけ

  • コマンドプロンプトからのcmd実行について

    現在VBSでオブジェクトを定義しrunを使いcmd経由で他のバッチ・VBS・ソフトの起動をやっています。 ふととあるパスが実行できませんでした。 そこで別途個別にコマンドプロンプトだけで実行してみましたがやはりうまく処理できません。 [echo.bat] echo test pause [コマンドプロンプト] rem その1 cmd /K c:\temp\a\echo.bat rem その2 cmd /K C:\Temp\(a\echo.bat その1の結果 C:>cmd /K C:\Temp\a\echo.bat C:>echo test test C:>pause 続行するには何かキーを押してください . . . その2の結果 C:>cmd /K C:\Temp\(a\echo.bat 'C:\Temp\' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:> 上記のように1は正常に処理され2はうまく処理されません。 解決策をひたすら検索したのですが見つからず なんとなくだいたい分かったのが一部『(』や『)』や『&』や『@』や『^』などの記号が混じるとどうやらうまく処理できないようです。 なぜ処理できないのか?と、如何すればこれを回避して実行できるか分かる方がいればよろしくお願いします。 備考: (現状の緊急回避として記号のあるパスは記号のないパスから経由batを生成する方法を思いつきましたが自分で馬鹿だと思います) (経由バッチの中身が"C:\Temp\(a\echo.bat"ならば実行できるから) また、cmd /K "C:\Temp\(a\echo.bat" では実行できませんでした。 OSはXPです。コマンドプロンプトヴァージョンは(Microsoft Windows XP [Version 5.1.2600])です

  • PowerShellで処理を簡単にしたい

    PowerShellは、ど素人です。 PowershellであるPs1ファイルを実行するのに 現在下記の手順で行っています。 1)PowerShellを管理者権限で実行 2)以下のコマンドを最初に実行 powershell set-executionPolicy remoteSigned 3)次に以下のコマンドを実行 powershell -File C:\Users\Mic\Desktop\Keep\sample.ps1 毎回、2),3)をPowerShellの画面にコピペして処理しています。 もう少し簡単な手順になれば嬉しいのですが、 1),2),3)を一つのBATで処理するような方法はありませんか ? BATに限らず手順が減るような方法があれば教えてください。

  • PowershellからLhaplus.exeの起動

    PowershellからLhaplus.exeの起動 PowershellからLhaplus.exeを実行するにはどうすれば良いですか? 別にLhaplus.exeに限定した話ではないのですが、何かしらの.exeを起動する方法が知りたいです。 例えば、コマンドプロンプトから cmd>regedit と打てばレジストリエディタが開きます。 同じ事をPowershellから PS>regedit と打てば、同じくレジストリエディタが開きます。 ところが、 コマンドプロンプトから cmd>"C:\Program Files\Lhaplus\Lhaplus.exe" と打てばLhaplusの画面が開くのに対し、 同じ事をPowershellから PS>"C:\Program Files\Lhaplus\Lhaplus.exe" と打てば、 次の行に入力内容が表示されるだけでLhaplusの画面は開きません。 PowershellからLhaplus.exeを実行するにはどうすれば良いですか?

  • バッチファイルの作成

    以下のようなバッチファイルを実行する場合に、全てのログを出力したいです。 どのようにしたらよいでしょうか? ○はファイル名で、続きが該当のファイルにコーディングされている内容です。 ○TEST1.CMD TEST1_SUB1.CMD TEST1_SUB2.CMD ○TEST1_SUB1.CMD  net use S: /delete net use S: \\XXXX\XXXX PASS /user:USER copy \\XXXX\XXXX.* D:\TEST\ net use S: /delete ○TEST1_SUB2.CMD SQLPLUS AAA/BBB@CCC @TEST.SQL 尚、TEST1.CMDにて、以下のように出力しようとしたのですが、 TEST1_SUB1.CMD >> TEST1_SUB1.LOG TEST1_SUB2.CMD >> TEST1_SUB2.LOG TEST1_SUB1.LOGへは出力されたのですが、 TEST1_SUB2.LOGへの出力が行われませんでした。 同一ファイル内で複数のファイルへ出力できないようでした。 どなたかご教示ください。

  • PowerShellからBATに制御を戻す方法

    【環境】 OS:Windows Server 2008 R2 SP1 【状況】 BATファイルにてメニューを作成しており、表示されたメニューの中からPowerShellで作成したテストイベントを送信するスクリプトを実行するための番号を入力後、Enterキーを押すとテストイベントが送信されるようになっております。 PowerShellが実行された後、呼び出し元のBATファイルに戻りメニューを表示させたいと考えておりますが、PowerShellが実行完了後、BATファイルに戻りません。 ※ JP1の動作定義ファイル(ntevent.conf)を修正しており、修正したフィルタが正常に動作することおよび既存のフィルタが影響がないかを確認するためにBATファイルからPowerShellでテストイベントを発行するためにBATおよびPowerShellでプログラムを作成しております。 【ご教示頂きたい点】 PowerShellが実行後、BATファイルに戻り、メニューを表示させるようにしたいと考えており、どのようにしたらBATに制御を戻すことができるかご教示頂けますでしょうか。

  • Windowsのバッチファイルでcallコマンド時にログを残す方法について

    お世話になっております。 Windowsのバッチファイルについての質問です。 Windowsのバッチファイル内で、さらにバッチファイルをcallコマンドに よって、呼び出しているのですが、その呼び出したバッチファイルの logを残したいのですが、実装方法が分かりません。 # UNIXのscriptコマンドのようなコマンドがあれば実装できると # 考えたのですが、存在していないようです。 callコマンドは、リダイレクトorパイプが使えないらしいので、 以下のような記述だとlogを出力することができません。 call test.bat > test.log ご存知の方がいらっしゃいましたら、ご教示下さい。 以上、よろしくお願いいたします。

  • 外部ファイルを実行するには?

    お世話になります。 vb6で外部のバッチファイルを起動して、それを動作させようとしているのですが、うまくいきません。特にエラーにはならず、一瞬DOSプロントは立ち上がるんですが、バッチ処理しているログにはなにも書き込まれません。普通にバッチファイルをダブルクリックさせるか、コマンドからバッチファイルの入っているフォルダまでいって、バッチファイルを実行すれば書き込まれるのですが。 どこがまちがっているのでしょうか?shellじゃなくて、違う関数を使わなければいけないのでしょうか?ご教授よろしくお願いします。 なお、vb6でテストするときは▸マークの実行を押して、テストしました。 サンプル用のものです。 ↓test 現在の時間をログに記入 ■バッチファイルの中身(test.bat) echo test >> log.txt time/t >> log.txt ■vb6のファイルの中身 Private Sub Command1_Click() Dim ret as long ret = shell("cmd.exe /c C:\test\test.bat",4) End Sub

専門家に質問してみよう