2015-11-05 44 views
2

我是新手,电源外壳,我不能出来算出这个非常简单的代码,并有一个问题PowerShell提示符运行的PowerShell :从参数

function abc 
{ 
Param( 
     [parameter(Mandatory=$false] 
     $Env 
} 

Write-Output "The parameter is: $Env" 
} 
abc $Env 

现在从调用命令行此脚本:

C:\Dev> . "c:\Folder\abc.ps1" "Dev" 
The parameter is: 
C:\Dev> . "c:\Folder\abc.ps1" "Dev" 
The parameter is: 

现在,如果我初始化恩v那就行了;

C:\Dev> $Env = "Dev" 
C:\Dev> . "c:\Folder\abc.ps1" 
C:\Dev> The parameter is: Dev 

我希望能够从任何位置,而不是在其被放置在文件夹使这个在像上面一行。 我使用来自电力shell提示符电源外壳在Windows环境下

你的帮助是一对夫妇的选择这里赞赏

+0

您的第一个脚本不接受参数。这就是为什么当你传递一个字符串时它什么也不做。同时避免使用'$ env',因为它与环境变量名称相同。 – Matt

回答

1

可以调用使用下面的语句来设置$ ENV

.\abc.ps1 -env "dev" 

值或者你可以更新您的代码以提取您传递中是无名的参数值。这些存储在一个名为$ args的数组中。

function abc 
{ 
} 

$env=$args[0] 

Write-Output "The parameter is: $env" 
abc $env 

然后调用该函数作为

"c:\Folder\abc.ps1" "Dev" 
+0

谢谢,但必须有一种方法可以从一个命令行运行而不是之前设置它。我正在使用构建系统来运行电源外壳,所以很不幸没有这种自由。 – Akshay

+0

@Akshay我不明白你为什么认为像这样的东西不起作用。 – Matt

+0

@Akshay不确定你以前的设置是什么意思。这两个选项都从一个命令行运行。 –

0

你的第一个脚本并没有的参数传递。这就是为什么你的第一个例子不会净化你期望的输出。 $env始终为空。

关于该主题,不要使用$env作为变量,因为它与用于环境变量的提供程序相同。尽管如此,与您的问题无关。只要知道这是一件应该避免的事情,因为它可能是未来问题或混乱的原因。

第二个代码调用的原因是因为使用了dot operator

。点采购操作

运行在电流范围脚本,以便任何功能, 别名和变量,该脚本创建被添加到当前 范围。

如果你想让你的第一个脚本工作,你需要处理参数。 answer by Alec Collier涵盖了一种简单的方法。使用$args变量。还有其他几个,其中一个涉及param,就像您在函数中使用的一样。

Param( 
    [parameter(position=0, 
     Mandatory=$false)] 
    $bagel 
) 

function abc { 
    Param( 
     [parameter(Mandatory=$false)] 
     $value 
    ) 

    Write-Output "The parameter is: $value" 
} 

abc $bagel 

然后脚本可以像你一样被调用。

. "c:\Folder\abc.ps1" "Dev" 
0

随着从}字符一个字符),这似乎是你一个错误的简单变化,您的脚本应该工作精绝。

我说的是这样的:

Param( 
    [parameter(Mandatory=$false] 
    $Env 
} <------------- 

通知开括号是怎样一个圆形支架,而不是一个大括号。通过放一个大括号,你正在关闭函数,因此没有任何工作。