Использование PSScriptRoot с Import-CSV

Как подробно описано в:

PowerShell-Import-Local-CSV

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

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


person Royston    schedule 05.10.2018    source источник


Ответы (2)


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

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

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

person Theo    schedule 05.10.2018
comment
У меня возникла проблема с импортом CSV-файла с помощью файла import-csv $PSScriptRoot Folder\file.csv. Это не работает. - person Royston; 05.10.2018
comment
Ага, но тогда, пожалуйста, объясните, что именно не работает. Вы получаете сообщения об ошибках? - person Theo; 05.10.2018

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

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

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

Демо

  • Создайте файл Test.psm1.
  • Создайте файл 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
person G42    schedule 05.10.2018