Нет!
(по крайней мере, не в надежной моды)
Простая причина в том, что контекстная информация о переменном ссылочного как аргумент параметра будет уже отбрасываются к тому времени, вы можете проверить значение параметра внутри функции.
задолго до функции на самом деле называется, СА оценивали значение каждого отдельного аргумента параметра, и (необязательно) принуждают к типа указанного значения для любого типа, как ожидается, с помощью параметра это обязательно ,
Так что вещь, которая в конечном счете, передаются в качестве аргумента функции не переменной $myVariable
, но (потенциально принуждает) значения из $myVariable
.
см about_Parsing
help file (Get-Help about_Parsing
) больше по этой теме
Это, возможно, также стоит отметить, что нет никакой гарантии, что аргумент параметра является переменной и не буквальной или другим выражение значение:
PS C:\> MyFunc 'This is not even a variable'
PS C:\> MyFunc $('Neither','is','this' -join ' ')
Вы можете получить некоторую информацию о (потенциально) используются переменные, глядя на контекст вызова, извлекается через Get-PSCallStack
cmdlet:
function Get-ImmediateInvocationString
{
param($myArg)
# Grab second-to-last call
return @(Get-PSCallStack)[-2].InvocationInfo.Line
}
Затем используйте это нравится:
PS C:\> $myVariable = "someValue"
PS C:\> Get-ImmediateInvocationString -myArg $myVariable
Get-ImmediateInvocationString -myArg $myVariable
Вы могли бы (аb) использовать это, чтобы вывести аргумент -myArg
, путем захвата говорят последний «переменной типа» строка в вызове:
function Get-ImmediateInvocationString
{
param($myArg)
# Grab second-to-last call
$Line = @(Get-PSCallStack)[-2].InvocationInfo.Line
if($Line -match '\$(?<varName>[\w]+)\s*$'){
Write-Host $Matches['varName']
}
}
Это может показаться, что он прекрасно работает в самом начале:
PS C:\> Get-ImmediateInvocationString -myArg $myVariable
myVariable
До тех пор пока пользователь, который не заботится о своем аттестационном ожидании не приходит:
PS C:\> Get-ImmediateInvocationString -myArg $myVariable; $lol = ""; Write-Host $lol
lol
Так нет, вы не можете делать то, что вы хотите без разбора вызывающего выражения так же, как и фактический парсер.
«* Возможно ли печатать имена переменных в Power Shell? * "- уверен; просмотрите количество сообщений в StackOverflow, где люди спрашивают: «Write-Host» Имя переменной - $ myVariable'' - почему это только показывает имя, а не значение? » – TessellatingHeckler