Покажу, как в скрипте, написанном на PowerShell, можно определить каталог его размещения, имя файла этого скрипта, а так же функцию, в составе которой выполняется текущая строка кода. Так же покажу разницу между аргументами функции и её параметрами.
Параметры функций, фильтров и командлетов имеют имена и не входят в состав переменной $Args. Если при вызове функции/фильтра/командлета явно указывать имена параметров, то неважно, в каком порядке они следуют. Все параметры и аргументы разделяются друг от друга пробелом. Если вместо пробела между некоторыми аргументами ставить запятую, то этот блок аргументов будет воспринят как один аргумент в виде массива.
Пишем два тестовых файла: MyTestFile.ps1 и MyOtherScript.ps1, сохранив их в одном каталоге (это не принципиально - можно и в разных).
Пишем два тестовых файла: MyTestFile.ps1 и MyOtherScript.ps1, сохранив их в одном каталоге (это не принципиально - можно и в разных).
MyTestFile.ps1:
# Полное имя выполняемого в данный момент скрипта $fullName = $MyInvocation.MyCommand.Definition "Полное имя текущего скрипта: '$fullName'" # Каталог, в котором размещён файл исполняемого в данный момент скрипта. $curDir = $MyInvocation.MyCommand.Definition | split-path -parent "Каталог текущего скрипта: '$curDir'" # Имя файла выполняемого в данный момент скрипта $name = $MyInvocation.MyCommand.Name "Имя файла текущего скрипта: '$name'" # Запустим из текущего скрипта др. скрипт и воспользуемся определённой в нём # функцией # Имя скрипта, который хотим запустить дополнительно $fileName = "MyOtherScript.ps1" # Выполняем конкатенацию $script = "$curDir\$fileName" "`n*******`n" "Сейчас запустим скрипт $script..." # Запускаем скрипт . $script "`nЗапускаем функцию HelloMsg без аргументов:" HelloMsg "Запускаем функцию HelloMsg с произвольным набором аргументов:" HelloMsg 1 7 "abc" "def" "`n*******`n" "Разными способами запускаем функцию MyFunction..." MyFunction -First "Первый" -Second "способ" MyFunction -Second "способ" -First "Второй" MyFunction "Третий" "способ" MyFunction "Четвёртый" "способ" "a" "b" "c" "d" $(1..4) MyFunction "Пятый" "способ" "a", "b", "c", "d" $(1..4)
MyOtherScript.ps1 (тот файл, содержимое которого загружается нами в предыдущем коде):
# Сообщаем о начале работы "Начал выполняться скрипт $($MyInvocation.MyCommand.Definition)..." # Определяем элементарную функцию function HelloMsg { "Привет из функции $($MyInvocation.MyCommand.Name)!" # Даже если для функции не определено параметров, всегда можно # получить доступ к переданным ей аргументам (не путать с параметрами): $Args | Write-Host "`n" } # Определяем элементарную функцию function MyFunction ($First, $Second) { "First = $First`nSecond = $Second" # Печатаем все параметры $Args | Write-Host "`n" }
Результат работы кода:
Полное имя текущего скрипта: 'C:\test\MyTestFile.ps1' Каталог текущего скрипта: 'C:\test' Имя файла текущего скрипта: 'MyTestFile.ps1' ******* Сейчас запустим скрипт C:\test\MyOtherScript.ps1... Начал выполняться скрипт C:\test\MyOtherScript.ps1... Запускаем функцию HelloMsg без аргументов: Привет из функции HelloMsg! Запускаем функцию HelloMsg с произвольным набором аргументов: Привет из функции HelloMsg! 1 7 abc def ******* Разными способами запускаем функцию MyFunction... First = Первый Second = способ First = Второй Second = способ First = Третий Second = способ First = Четвёртый Second = способ a b c d 1 2 3 4 First = Пятый Second = способ a b c d 1 2 3 4
Комментариев нет:
Отправить комментарий