I have a test powershell V2 script that looks like this:
function test_args()
{
Write-Host "here's arg 0: $args[0]"
Write-Host "here's arg 1: $args[1]"
}
test_args
If I call this from the powershell command prompt I get this on the screen:
here's arg[0]: [0]
here's arg[1]: [1]
Not quite what I wanted. It seems I have to copy $args[0] and $args[1] to new variables in the script before I can use them? If I do that I can access things fine.
Is there a way to access the indexed $args in my code? I've tried using curly braces around them in various ways but no luck.
I'll be moving to named parameters eventually, but the script I'm working on (not this demo one) is a straight port of a batch file.
Try this instead:
function test_args()
{
Write-Host "here's arg 0: $($args[0])"
Write-Host "here's arg 1: $($args[1])"
}
test_args foo bar
Note that it is $args
and not $arg
. Also when you use a PowerShell variable in a string, PowerShell only substitutes the variable's value. You can't directly use an expression like $args[0]
. However, you can put the expression within a $()
sub-expression group inside a double-quoted string to get PowerShell to evaluate the expression and then convert the result to a string.