ฉันมีไฟล์ PowerShell สองไฟล์ a.ps1 และ b.ps1
ที่จุดกึ่งกลางใน a.ps1 ฉันต้องการเริ่มใช้งานโค้ดใน b.ps1 และยุติสคริปต์ a.ps1
จะพิจารณาได้อย่างไรว่าไฟล์ทั้งสองอยู่ในโฟลเดอร์เดียวกัน
ฉันมีไฟล์ PowerShell สองไฟล์ a.ps1 และ b.ps1
ที่จุดกึ่งกลางใน a.ps1 ฉันต้องการเริ่มใช้งานโค้ดใน b.ps1 และยุติสคริปต์ a.ps1
จะพิจารณาได้อย่างไรว่าไฟล์ทั้งสองอยู่ในโฟลเดอร์เดียวกัน
คำตอบ:
ไม่เป็นไรถ้าเรียกใช้ b.ps1 ในกระบวนการ Power Shell ใหม่ ถ้าเป็นเช่นนั้นต่อไปนี้ควรทำในสิ่งที่คุณอธิบาย
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + "\b.ps1"))
"Invoke-Expression" ดำเนินการในกระบวนการเดียวกัน แต่รอการยกเลิก b.ps1
ใน a.ps1
& .\b.ps1
วิธีที่คุณเรียกใช้โปรแกรมอื่น
ฉันได้รับสิ่งนี้จากบทความอื่น แต่สามารถสมัครได้ที่นี่: ขอบคุณ ( /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)
(นั่นเป็นของฉัน)
ใช้ตัวแปร Magic $ PSScriptRoot เพื่ออ้างถึงไดเรกทอรีปัจจุบันของคุณ จากนั้นเรียกสคริปต์ B ด้วยเครื่องหมายและ ("ผู้ดำเนินการโทร"):
$script = $PSScriptRoot+"\b.ps1"
& $script
หากคุณต้องการเก็บตัวแปรจาก B ในขอบเขต A คุณสามารถเรียกใช้สคริปต์โดยใช้โอเปอเรเตอร์การจัดหา Dot:
$script = $PSScriptRoot+"\b.ps1"
. $script