С Новым годом! Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
1

В $MyInvocation исчез параметр path (значение NULL)

05.04.2018, 19:09. Показов 4771. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго дня!
Допиливая скрипт наткнулся на проблему: длительное время отрабатывала строка
PowerShell
1
$ScriptPath = $MyInvocation.MyCommand.Path | Split-Path -Parent #Текущий каталог сценария
В какой-то момент получаю следующее:

Код
Split-Path : Не удается привязать аргумент к параметру "Path", так как он имеет значение NULL.
строка:1 знак:32
+ $MyInvocation.MyCommand.Path | Split-Path -Parent #Текущий каталог сценария
+                                ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: ( : ) [Split-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SplitPathCommand


Пробовал использовать $PSScriptRoot - пусто.
Решил взглянуть:
PowerShell
1
PS C:\Windows\system32> $MyInvocation
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MyCommand             : $MyInvocation
BoundParameters       : {}
UnboundArguments      : {}
ScriptLineNumber      : 0
OffsetInLine          : 0
HistoryId             : 13
ScriptName            : 
Line                  : 
PositionMessage       : 
PSScriptRoot          : 
PSCommandPath         : 
InvocationName        : 
PipelineLength        : 2
PipelinePosition      : 1
ExpectingInput        : False
CommandOrigin         : Runspace
DisplayScriptPosition :
Создаю новый скрипт:
PowerShell
1
2
3
4
5
6
7
8
function Main
{
    Write-Host ("MyCommand.Path from function: " + $MyInvocation.MyCommand.Path)
    Write-Host ("ScriptName from function: " + $MyInvocation.ScriptName  | Split-Path -Parent)
}
Main
Write-Host ("MyCommand.Path from script scope: " + $MyInvocation.MyCommand.Path | Split-Path -Parent)
Write-Host ("ScriptName from script scope: " + $MyInvocation.ScriptName)
Получаю:
PowerShell
1
2
3
4
MyCommand.Path from function: 
ScriptName from function: C:\Public\Сценарии
MyCommand.Path from script scope: C:\Public\Сценарии
ScriptName from script scope:
Подскажите, что бы это могло значить и как восстановить параметр "path"? Версия 4.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2018, 19:09
Ответы с готовыми решениями:

PHP setcookie параметр $path
Здравствуйте. Проблема заключается в использовании функции setcookie().Когда я устанавливаю...

Параметр контроллера всегда null
Доброго времени суток. Вопрос банальный, как мне кажется, но почему то у меня это не работает......

Как передать параметр NULL?
В DataAdapter имеется функция, которая принимает параметр типа Int и выполняет хранимую процедуру....

Сокращение пути к файлу, x:\path\path\...\path
Помогите с решением такой задачи, желательно до четверга)): Строка длиной не более 1000 символов...

4
Любознательный
6572 / 1941 / 335
Регистрация: 10.03.2016
Сообщений: 4,477
05.04.2018, 20:34 2
В зависимости от того, откуда вызывается автопеременная с определенным свойством, она имеет различный тип и заполняется по-разному:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$path = $MyInvocation.MyCommand.Path|split-path -par
$scriptname = $MyInvocation.MyCommand.Name
$path
$scriptname
 
function Main
{
    $MyInvocation|gm
    $myinvocation.MyCommand|gm
}
Main
$MyInvocation|gm
$myinvocation.MyCommand|gm
Автопеременные
В отличие от автоматических переменных $PSScriptRoot и $PSCommandPath свойства PSScriptRoot и PSCommandPath автоматической переменной $MyInvocation содержат сведения о вызывающем объекте или скрипте, а не текущем скрипте.
0
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
06.04.2018, 11:05  [ТС] 3
Спасибо!
Нужный результат получается одинаковый только так (в теле и в функции):
$PSScriptRoot или $PSCommandPath | Split-Path -Parent

Остается непонятным, почему до какого-то момента в теле отрабатывало (а сейчас нет):
$MyInvocation.MyCommand.Path | Split-Path -Parent
Это строка оставалась неизменной всегда, изменения вносились дальше.

Иногда удобно выполнить выделенный фрагмент, но в этом случае ни один из вариантов не работает.
0
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
06.04.2018, 12:02 4
Лучший ответ Сообщение было отмечено Joey как решение

Решение

Цитата Сообщение от mutaborio Посмотреть сообщение
Иногда удобно выполнить выделенный фрагмент
Возможно вы это знаете, но на всякий случай - если вы про выполнение выделенного куска внутри функции, то нужно помнить, что область действия (scope) переменных внутри функции локальная, т.е. пример ниже выдаст 2, но если после выполнения выделить и выполнить $x - мы получим опять 1

PowerShell
1
2
function foo ($x) {$x++; $x}
$x = 1; foo $x
1
1 / 1 / 0
Регистрация: 06.10.2017
Сообщений: 39
06.04.2018, 12:55  [ТС] 5
Спасибо
0
06.04.2018, 12:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2018, 12:55
Помогаю со студенческими работами здесь

Параметр query string возвращает null
Здравствуйте!!! Помогите понять почему возвращается null. Есть урл...

Получение данных из бд имеющих параметр null
Есть контрол, который имеет лишь реализацию индекса. SupportContext db = new SupportContext(); ...

Параметр кнопки Image равен null
Здравствуйте. Столкнулся с некоторой проблемой. Есть у меня массив кнопок (Button). Во время работы...

Null как параметр SqlCommand для запроса
Делаю выборку из БД по параметрам - по городу. Город это переменная в функции. Всё отлично...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru