Использование PSScriptRoot с Import-CSV - PullRequest
0 голосов
/ 05 октября 2018

Как указано в:

PowerShell-Import-Local-CSV

$empCsv = Import-Csv "$PSScriptRoot\addEmp.csv"

Классифицируется как ответ.Это не работает для меня, когда я запускаю этот код внутри функции.Как я могу проверить это?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

$PSScriptRoot предоставит путь для текущего запущенного скрипта / функции , поэтому, если скрипт запускает функцию из другого местоположения, $PSScriptRoot будет содержать это другое местоположение.

Если вы хотите получить путь к скрипту, который вызывает функцию, используйте $MyInvocation:

$empCsv = Import-Csv "$(Split-Path $MyInvocation.ScriptName)\addEmp.csv"

Демо

  • СоздайтеTest.psm1 file.
  • Создайте файл Caller.ps1 в подпапке.
  • Выполните Caller.ps1.
  • $PSScriptRoot будет ссылаться на Test.psm1 местоположение, $MyInvocation будет обозначать Caller.ps1 местоположение.

Test.psm1:

Function Test{
    Write-host "PSScriptRoot: $PSScriptRoot"
    Write-host "MyInvocation: $(Split-Path $MyInvocation.ScriptName)"
}

Caller.ps1:

Import-Module ..\Test.psm1 -Force
Test
0 голосов
/ 05 октября 2018

Вы можете проверить свою версию Powershell с помощью $PSVersionTable.PSVersion.Если она ниже версии 3.0, вы можете использовать:

Split-Path $script:MyInvocation.MyCommand.Path -Parent

, чтобы найти каталог, из которого выполняется текущий скрипт, вместо $PSScriptRoot.

...