2014-03-12 209 views
0

試圖在PS中做一些非常簡單的事情,但出於某種奇怪的原因,它只是不玩球。我的PS腳本的樣子:Powershell腳本調用函數

出於某種原因,它抱怨一個事實,即:

enableMSDTC:術語「enableMSDTC未被識別爲cmdlet,函數的名稱,腳本文件或可操作程序。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確,然後重試。

我不允許這樣做嗎?我必須爲每個函數有一個單獨的腳本文件?

在此先感謝,DS。

param 
    (
     [string]$folder = $(throw 'Local folder to map to is required.') 
    ) 

    begin 
    { 
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 
    } 
    process 
    { 
$hasDrive = Test-Path -Path "D:\" 

    if ($hasDrive -eq $true) { 
     echo "Enabling MSDTC settings..." 
     enableMSDTC  
    } 

    Function enableMSDTC() { 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "LuTransactions" -Value "1" 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "NetworkDtcAccess" -Value "1" 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "NetworkDtcAccessAdmin" -Value "1" 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "NetworkDtcAccessClients" -Value "1" 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "NetworkDtcAccessInbound" -Value "1" 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "NetworkDtcAccessOutbound" -Value "1" 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "NetworkDtcAccessTransactions" -Value "1" 
     Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSDTC\Security" -Name "NetworkDtcAccessXaTransactions" -Value "1"   
    } 
} 

回答

1

在嘗試調用它之前定義該函數。

+0

親愛的上帝沒有意識到這是程序!謝謝。 –

+0

當我開始的時候,我一直在屁股上咬我。 :) – EBGreen

0

Powershell是解釋的語言,這意味着命令在運行時按順序(自上而下)進行解析。

在定義它之前,您不能調用函數或引用變量。

+2

那麼,只是爲了迂腐,解釋與編譯語言並不能確定這一點。例如,VBScript是一種解釋型語言,您可以將函數放在文件末尾,而不會出現任何問題。它僅取決於解釋器的行爲方式。 – EBGreen

相關問題