如何调用/使用一个ps.1脚本函数,变量和类到另一个ps.1文件而不使用psm1和完整目录路径?

问题描述 投票:0回答:1

D:\NoName\testfolder1\test1.ps1

function restapi {
    Write-Host "Initiating Rest Call"
    $test_value = "1"
}

D:\NoName\Testfolder1\testfolder2\test2.ps1

Invoke-Expression -Command D:\NoName\testfolder1\test1.ps1
function Invoke-Rest {
    restapi
    Write-Host "Invoking rest call and value of test is $test_value"    
}

如何在不提供完整路径的情况下调用/导入test1.ps1文件,就像我们在Python中一样:

import testfolder1
from .testfolder1 import test1
python powershell
1个回答
1
投票

PowerShell本质上有两种导入机制:

  1. Module import(通过Import-Module)或者模块名称(如果模块位于$env:PSModulePath): Import-Module BitsTransfer 或者使用完整/相对路径: Import-Module 'C:\some\folder\foo.psm1' Import-Module '.\subfolder\bar.psm1'
  2. Dot-sourcing常规PowerShell脚本,也有完整或相对路径: . 'C:\some\folder\foo.ps1' . '.\subfolder\bar.ps1'

在你的情况下,你可能想要后者:

. "$PSScriptRoot\..\testfolder1\test1.ps1"
function Invoke-Rest {
    restapi
    Write-Host "Invoking rest call and value of test is $test_value"    
}

请注意,在PowerShell v3之前,automatic variable $PSScriptRoot不可用。在早期版本中,您需要自己确定目录,如下所示:

$scriptdir = Split-Path $MyInvocation.MyCommand.Path -Parent
. "$scriptdir\..\testfolder1\test1.ps1"
© www.soinside.com 2019 - 2024. All rights reserved.