web-dev-qa-db-ja.com

コマンドライン経由でPowerShellスクリプトに変数を渡す

私はPowerShellの初心者であり、自分自身に基本を学ぼうとしています。ファイルを解析するためにpsスクリプトを書く必要がありますが、それほど難しくはありません。

次に、変数をスクリプトに渡すように変更します。その変数は解析文字列になります。これで、変数は常に1単語になり、単語のセットや複数の単語にはなりません。

これは非常に単純に思えますが、私にとっては問題を提起しています。これが私の簡単なコードです。

$a = Read-Host
Write-Host $a

コマンドラインからスクリプトを実行すると、変数の受け渡しが機能しません。

.\test.ps1 hello
.\test.ps1 "hello"
.\test.ps1 -a "hello"
.\test.ps1 -a hello
.\test.ps1 -File "hello"

ご覧のとおり、スクリプトが値を取得して出力するという、多くの成功を収めない方法を試しました。

スクリプトは実行され、値が入力されるまで待機します。実行すると、その値がエコーされます。

渡された値を出力したいだけですが、不足しているものは何ですか?

ありがとうございました。

51
cquadrini

Powershellのパラメーターに関する優れたチュートリアルを次に示します。

PowerShell ABC-Pはパラメーター用

基本的に、スクリプトの最初の行paramステートメントを使用する必要があります

param([type]$p1 = , [type]$p2 = , ...)

または、すべての引数が自動入力される$ args組み込み変数を使用します。

49
Brian Stephens

これをtest.ps1の最初の行で作成します

param(
[string]$a
)

Write-Host $a

その後、あなたはそれを呼び出すことができます

./Test.ps1 "Here is your text"

見つかった ここ

63
Solaflex

Test.ps1でパラメーターを宣言します。

 Param(
                [Parameter(Mandatory=$True,Position=1)]
                [string]$input_dir,
                [Parameter(Mandatory=$True)]
                [string]$output_dir,
                [switch]$force = $false
                )

Run OR Windows Task Schedulerからスクリプトを実行します。

powershell.exe -command "& C:\FTP_DATA\test.ps1 -input_dir C:\FTP_DATA\IN -output_dir C:\FTP_DATA\OUT"

または、

 powershell.exe -command "& 'C:\FTP DATA\test.ps1' -input_dir 'C:\FTP DATA\IN' -output_dir 'C:\FTP DATA\OUT'"
9
Shilpa11

以下のようなパラメーターを渡しました。

Param([parameter(Mandatory=$true,
   HelpMessage="Enter name and key values")]
   $Name,
   $Key)

。\ script_name.ps1 -Name name -Key key

3
kalaivani

Paramを使用してパラメーターに名前を付けると、パラメーターの順序を無視できます。

ParamEx.ps1

# Show how to handle command line parameters in Windows PowerShell
param(
  [string]$FileName,
  [string]$Bogus
)
write-output 'This is param FileName:'+$FileName
write-output 'This is param Bogus:'+$Bogus

ParaEx.bat

rem Notice that named params mean the order of params can be ignored
powershell -File .\ParamEx.ps1 -Bogus FooBar -FileName "c:\windows\notepad.exe"
0
mxmoss