Cmdでは、実行するbatファイルが指定された後に引数をリストすることで、あるbatから別のbatに引数を渡すことができました。次に、実行するバットはそれらを%1、%2、%3などとして受け取りました。これはPowershellで実行できますか?
ユーザーに場所の入力を求めるps1スクリプトscript1が1つあります。そのスクリプトは処理されています。その場所は変数として保存されます。 $ loc。最初のスクリプトでは、ユーザーが、より多くのオプションを持つ別のps1スクリプトscript2を実行するオプションを選択できるという点があります。 script1からscript2に$ locを渡したい。
Script1で、私は次のことを試しました。
param ($loc)
start-process "\script2.ps1" -ArgumentList $loc
start-process "\script2.ps1" -$loc
start-process "\script2.ps1"
次にスクリプト2です
args[0]
$loc
私はおそらく、引数を渡すことを理解していないだけだと知っています。別のオプションがbatスクリプトを呼び出すということです。 -ArgumentList $ locを使用すると、問題なく渡されます。 「Setloc =%1」を使用して、batスクリプトでその引数を取得します。
あるPowerShellスクリプトを別のPowerShellスクリプトから実行するのにStart-Process
は必要ありません。必要なパラメータを使用して2番目のスクリプトを呼び出すだけです。
# script1.ps1
$loc = Read-Host 'Enter location'
C:\path\to\script2.ps1 $loc 'other parameter'
2番目のスクリプトでは、引数リストには、たとえば$args
配列を介してアクセスできます。
# script2.ps1
Write-Host $args[0]
Write-Host $args[1]
次のように名前付きパラメーターを定義することもできます。
# script2.ps1
Param($Location, $Foo)
Write-Host $Location
Write-Host $Foo
または(より完全な)このように:
# script2.ps1
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$Location,
[Parameter(Mandatory=$false)]
[string]$Foo
)
Write-Host $Location
Write-Host $Foo
名前付きパラメーターを定義すると、順序を気にすることなく引数を渡すことができます。
C:\path\to\script2.ps1 -Foo 'other parameter' -Location $loc
または、関数本体にチェックを実装することなく、パラメータを自動的に設定する 検証済み :
# script2.ps1
Param(
[ValidateSet('a', 'b', 'c')]
[string]$Location,
[ValidatePattern('^[a-z]+$')]
[string]$Foo
)
Write-Host $Location
Write-Host $Foo
名前付きパラメーターが定義されたよりも多くの引数が渡された場合、それらの追加の引数は$args
配列に格納されます。
PS C:\> 猫test.ps1[。 。\ test.ps1'foo''bar ' foo bar
詳細については、 Get-Help about_Functions_Advanced_Parameters
を参照してください。
_param ($loc)
_
スクリプトのパラメータを定義する_.ps1
_スクリプトの先頭にあるので、次のように呼び出します。
PathToMyScript\MyScript.ps1 -loc ValueOfLoc
関数のparam
ステートメントで[CmdletBinding()]
を使用することを含め、すべての 適用できる属性 はスクリプトでも機能します。