web-dev-qa-db-ja.com

別の.ps1ファイルから.ps1を実行する方法は?

2つのPowerShellファイルがあります。 a.ps1およびb.ps1。

A.ps1の中心点で、b.ps1のコードの実行を開始し、a.ps1スクリプトを終了します。

両方のファイルが同じフォルダーにあると見なしてそれを行う方法は?

14
GibboK

B.ps1が新しいPower Shellプロセスで実行されても大丈夫ですか?もしそうなら、以下はあなたが説明することをするべきです。

Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))

「Invoke-Expression」は同じプロセスで実行されますが、b.ps1の終了を待ちます。

4
user2543253

A.ps1では、

& .\b.ps1

他のプログラムを呼び出す方法

26
chingNotCHing

私は別の記事からこれを得ましたが、ここで適用できます:感謝( https://stackoverflow.com/users/3905079/briantist

まず、リモートマシンへの単一セッションで複数の呼び出しを行う場合は、最初にPSSessionを作成します。

$session = New-PSSession -ComputerName $ComputerName

次に、以降のすべての呼び出しでそのセッションを使用します。

Invoke-Command -Session $session -File $filename
Invoke-Command -Session $session -ScriptBlock {
# Some code

次に、終了したらセッションを閉じます。

Remove-PSSession -Session $session

また、そのスクリプトが正確に何であるかがわからないが、スクリプトがどこで起動するかがわかっている場合は、次のようにできます。

$strInst = Get-ChildItem -Path $PSScriptRoot -Filter Import-Carbon.ps1 -recurse -ErrorAction SilentlyContinue -Force | Select Directory
Invoke-Experssion (start Powershell ($strinst\Import-Carbon.ps1)

(私の物です)

2
Kelly Davis

マジック変数$ PSScriptRootを使用して、現在のディレクトリを参照します。次に、アンパサンドを使用してスクリプトBを呼び出します( "Call operator"):

$script = $PSScriptRoot+"\b.ps1"
& $script

Bの変数をAのスコープ内に保持する場合は、ドットソースオペレーターを使用してスクリプトを実行できます。

$script = $PSScriptRoot+"\b.ps1"
. $script
0
Ferro