2015-09-14 32 views
1

我有一個PowerShell模塊,其中包含許多常見的管理和部署功能。這被安裝在我們所有的客戶工作站上。從大量腳本調用此模塊,這些腳本通過計劃任務或部署期間在登錄時執行。從模塊內部訪問PowerShell腳本參數

從模塊內,就可以得到調用腳本的名稱:

function Get-CallingScript { 
    return ($script:MyInvocation.ScriptName) 
} 

然而,從模塊內,我還沒有發現訪問最初傳遞到參數的任何方式調用腳本。出於我的目的,我寧願以字典對象的形式訪問它們,但即使是原始的命令行也可以。不幸的是,考慮到我的用例,從腳本中訪問參數並將它們傳遞給模塊不是一種選擇。

任何想法?謝謝。

回答

2

about_Scopes

會話,模塊和嵌套提示是自包含的環境, 但他們不是在會議上在全球範圍內的子範圍。

話雖這麼說,這個工作對我來說,從一個模塊中:

$Global:MyInvocation.UnboundArguments 

注意,我打電話時,腳本不帶參數的定義,我與一位不願透露姓名的參數腳本,以便UnboundArguments是有道理的。如果你定義的參數,您可能需要這個:

$Global:MyInvocation.BoundParameters 
+0

謝謝 - 使用全局變量MyInvocation的技巧解決了這個問題對我來說,但在方式不太你的建議。在我的測試中,UnboundArguments和BoundParameters總是空的。 但是,$ global:MyInvocation.MyCommand值確實填充了完整的命令行,並且可以從中提取參數。 – Dan

+0

@丹有趣,感謝您的更新。 – briantist

1

我可以看到這一般是如何安全的。例如,如果有一個證書從您的堆棧傳遞給堆棧,您將能夠訪問該證書。

傳遞給當前函數的參數可以通過$PSBoundParameters訪問,但是沒有一種機制來查看調用堆棧函數的參數。