我有main.ps1 file我正在匯入另一個檔案的位置$dirpath\new.ps1,如下所示:
Import-module $dirpath\new.ps1 -force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
try {
$getval = invoke-command -cn $host -Credential $cred -ScriptBlock {
param($name)
get-myfunc $name
} -ArgumentList $name
} catch {
...
}
兩者main.ps1 file和new.ps1都存在于同一目錄下 -$dirpath.
new.ps1外觀如下:
Function global:get-myfunc{
PARAM(
[Parameter(Mandatory=$true,Position=0)][STRING]$name
)
write-host "$name"
}
現在,main.ps1 file拋出以下錯誤:
$getval = invoke-command -cn $host -Credential $cred -S ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ObjectNotFound: (get-myfunc:String) [], CommandNotFoundException
FullyQualifiedErrorId : CommandNotFoundException
我嘗試重命名new.ps1為new.psm1然后匯入模塊,Import-module $dirpath\new.psm1但它仍然失敗并出現相同的錯誤。
我在用poweshell 5
uj5u.com熱心網友回復:
首要問題
該new.ps1檔案不是一個模塊,只是一個常規腳本,所以你不能/不應該使用Import-Module它。
模塊不僅僅是具有不同擴展名的腳本。有關更多資訊,請參閱:
- 關于模塊
- 如何撰寫 PowerShell 腳本模塊
如果要保留當前設定,請通過將以下行替換為dot sourceImport-Module腳本:
. $dirpath\new.ps1
這將執行腳本并在當前范圍內定義函式。
如果腳本與呼叫腳本位于同一檔案夾中,則可以使用以下命令進一步簡化陳述句$PSScriptRoot:
. $PSScriptRoot\new.ps1
第二期
Invoke-Command意味著您在不同的主機上運行腳本塊,這意味著它使用不同的范圍。這就是它找不到該get-myfunc功能的原因。
將您的宣告修改為:
Invoke-Command
-ComputerName $host `
-Credential $cred `
-ScriptBlock ${Function:get-myfunc} `
-ArgumentList $name
有關更詳細的說明,請參閱在 PowerShell 中遠程運行本地函式。
uj5u.com熱心網友回復:
那行不通,因為您正在將該模塊匯入本地計算機。但是,下面的命令正在遠程機器上執行。這意味著您需要在遠程機器上安裝該模塊,然后您可以在遠程機器上使用該模塊。
$getval = 呼叫命令 -cn $host -Credential $cred -ScriptBlock { param($name)
get-myfunc $name
請按照以下鏈接獲取解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444128.html
標籤:视窗 电源外壳 powershell 远程处理
