Как подробно описано в:
$empCsv = Import-Csv "$PSScriptRoot\addEmp.csv"
Классифицируется как ответ. Это не работает для меня, когда я запускаю этот код внутри функции. Как я могу проверить это?
Как подробно описано в:
$empCsv = Import-Csv "$PSScriptRoot\addEmp.csv"
Классифицируется как ответ. Это не работает для меня, когда я запускаю этот код внутри функции. Как я могу проверить это?
Вы можете протестировать свою версию Powershell с помощью $PSVersionTable.PSVersion
. Если он ниже версии 3.0, вы можете использовать:
Split-Path $script:MyInvocation.MyCommand.Path -Parent
чтобы найти каталог, из которого запущен текущий скрипт, вместо $PSScriptRoot
.
$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