質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

42082閲覧

Powershell: 外部PS1ファイルを引数付きで実行したい

退会済みユーザー

退会済みユーザー

総合スコア0

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

1クリップ

投稿2016/01/10 11:23

皆さま、よろしくお願いいたします。

###前提・実現したいこと
Powershellで外部ファイル(PS1形式)を、
引数付きで実行したい。

シェルプログラムを2つ作りました。

プログラム1)
テキストファイルを読み込んで、
行単位で、プログラム2を実行し、行を引数として渡す。

プログラム2)
プログラム1から引数を受け取って、別の処理をする。

###発生している問題・エラーメッセージ

引数無しの場合、期待した通り実行されます。
引数付きの場合、クオート等の記述状態によって、
まったく無視されたり、エラーになります。

例1)
コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。

例2)
式またはステートメントのトークン '$MyCMD' を使用できません。

例3)
式またはステートメントのトークン '""' を使用できません。

###ソースコード
プログラム1

# 引数ネタとなるテキストファイル $File = ”テキストファイルのパス” # スクリプト名 $mySelf = "プログラム2のパス" # 出力先 $oPath = Split-Path $File -parent # 行数ループ foreach ($TextLine in Get-Content $File) { $MyCMD = " -iPath ""$TextLine"" -oPath ""$oPath"" " #write-host $MyCMD & $mySelf "$MyCMD" }

プログラム2

param( [string]$iPath , [string]$oPath ) Write-Host "引数1" $iPath Write-Host "引数2" $oPath

引数ネタのテキストファイル
※行にスペースを含む

(ローカルのパス情報1) (ローカル の パス情報 2) ・ ・ ・ (ローカルのパス情報n)

###補足情報(言語/FW/ツール等のバージョンなど)

OS Win10 Pro
PS
Name Value


PSVersion 5.0.10586.0
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.10586.0
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$mySelf = "プログラム2のパス"

これはファイル名だけでなくフォルダー部分も含めているでしょうか。PowerShellではカレントディレクトリにあっても.\program2.ps2のように書かないと実行してくれません。

それと、複数のパラメータを一つの文字列にすると、それを一つのパラメータとしてスクリプトに渡されてしまい、期待通りに動かないので、コマンドライン全体を一つの文字列にしてからInvoke-Expressionで実行すれば良いです。
こんな感じ。

$MyCMD = $mySelf + " -iPath ""$TextLine"" -oPath ""$oPath"" " Invoke-Expression $MyCMD

投稿2016/01/13 13:01

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/16 05:33

コメント頂きまして、ありがとう御座いました。 クオートの位置や個数で全く動作が異なるのですね・・・(トホホ ご教示頂いたコードで、無事に解決できました。 ありがとう御座いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問