วิธีการรัน. ps1 จากไฟล์. ps1 อื่น


14

ฉันมีไฟล์ PowerShell สองไฟล์ a.ps1 และ b.ps1

ที่จุดกึ่งกลางใน a.ps1 ฉันต้องการเริ่มใช้งานโค้ดใน b.ps1 และยุติสคริปต์ a.ps1

จะพิจารณาได้อย่างไรว่าไฟล์ทั้งสองอยู่ในโฟลเดอร์เดียวกัน


ในขณะนี้ฉันกำลังใช้ 'ไฟล์พา ธ ' ของ PS โดยไม่ประสบความสำเร็จ
GibboK

คำตอบ:


4

ไม่เป็นไรถ้าเรียกใช้ b.ps1 ในกระบวนการ Power Shell ใหม่ ถ้าเป็นเช่นนั้นต่อไปนี้ควรทำในสิ่งที่คุณอธิบาย

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

"Invoke-Expression" ดำเนินการในกระบวนการเดียวกัน แต่รอการยกเลิก b.ps1



2

ฉันได้รับสิ่งนี้จากบทความอื่น แต่สามารถสมัครได้ที่นี่: ขอบคุณ ( /programming//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)

(นั่นเป็นของฉัน)


0

ใช้ตัวแปร Magic $ PSScriptRoot เพื่ออ้างถึงไดเรกทอรีปัจจุบันของคุณ จากนั้นเรียกสคริปต์ B ด้วยเครื่องหมายและ ("ผู้ดำเนินการโทร"):

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

หากคุณต้องการเก็บตัวแปรจาก B ในขอบเขต A คุณสามารถเรียกใช้สคริปต์โดยใช้โอเปอเรเตอร์การจัดหา Dot:

$script = $PSScriptRoot+"\b.ps1"
. $script
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.