2015-11-05 40 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 
} <------------- 

通知開括號是怎樣一個圓形支架,而不是一個大括號。通過放一個大括號,你正在關閉函數,因此沒有任何工作。