我有腳本庫上的常見幫手等方法,我想直接使用它們在PowerShell遠程處理,我怎麼不知道如何將它們傳遞到其他目標腳本機器。Powershell,pas功能作爲表達式到遠程計算機
我試圖通功能的腳本塊,並在遠程服務器上執行它,在本地計算機的一切工作正常:
function test { write-host "abc" }
Invoke-Command -ScriptBlock {Param($1) & $1} -ArgumentList ${Function:Test}
打印「ABC」
但是以下不工作:
function test { write-host "abc" }
Invoke-Command -ScriptBlock {Param($1) & $1} -ArgumentList ${Function:Test} -ComputerName "OTHERCOMPUTER" -Credential $cred
術語'寫主機'abc「'不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確,然後重試。 + CategoryInfo:ObjectNotFound:(寫主機 「ABC」:字符串)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
任何想法有什麼不好?
編輯: 爲了澄清下面的答案,其中函數本身在scriptblock中定義不適用,因爲函數是從僅位於使用遠程的計算機上的通用腳本文件中獲取的。它們就像「GetConfigurationFromAppConfig」,「SelectFromDatabase」等。
如果我爲每個腳本塊寫入函數,那麼我必須一遍又一遍地複製相同的代碼。我不想使用「通用」腳本位置,因爲每個計算機都可以在塊內部加載腳本(例如「\ SharedLocation \」),因爲它很脆弱(很多依賴性),並且必須針對每個服務器遠程處理(大量維護)。
剛剛發現一個更好的答案! http://stackoverflow.com/questions/8448808/using-invoke-command-scriptblock-on-a-function-with-arguments – Raf