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

时间:2017-12-27 07:22:28

标签: python powershell

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

1 个答案:

答案 0 :(得分: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'
    
  3. 在你的情况下,你可能想要后者:

    . "$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"