溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Powershell 函數(shù)中的CmdletBinding()是怎么回事?

發(fā)布時(shí)間:2020-07-04 18:14:20 來源:網(wǎng)絡(luò) 閱讀:12899 作者:raincity 欄目:系統(tǒng)運(yùn)維

參考文章:

Don Jones https://technet.microsoft.com/en-us/library/ff677563.aspx

powershell 幫助文檔: 

help about_functions_advanced_parameters

help about_common_parameters


把這三部分內(nèi)容都看完了,應(yīng)該也大概了解函數(shù)中的CmdletBinding()是做什么用的了,官方的文檔都是英文的,看起來一般會頭大。以下就是我用通俗的語言來做的描述,更簡單易懂一些。


這個(gè)功能的引入是從Powershell Version 2開始的,叫做函數(shù)的高級功能,在函數(shù)的聲明出啟用以后,可以調(diào)用我們所說的通用參數(shù):

  • -Verbose

  • -Debug

  • -ErrorAction

  • -WarningAction

  • -ErrorVariable

  • -WarningVariable

  • -OutVariable

  • -OutBuffer

  • -PipeLineVariable

通過放在函數(shù)開始部分可以很簡單的啟用訪問這些通用參數(shù)。如下所示:

[CmdletBinding()]

param()


啟用這個(gè)高級屬性以后,就可以很容易的通過像使用命令行一樣,給函數(shù)添加一些命令行的特色,調(diào)用命令很的通用參數(shù)。以下是一個(gè)最簡單的例子,打開一個(gè)ISE,把以下的內(nèi)容復(fù)制下去:


function Go-Advanced {

    [cmdletbinding()]param()

}


param() 這個(gè)關(guān)鍵字還是必須要有的,即使你沒有在函數(shù)中定義任何參數(shù);


嘗試運(yùn)行一下這個(gè)函數(shù),然后再打一下中橫線,怎么樣,就看到能夠調(diào)用的這些通用參數(shù)了吧。

Powershell 函數(shù)中的CmdletBinding()是怎么回事?

以下舉幾個(gè)例子來調(diào)用這些通用參數(shù),先來說說Verbose的用法。

還是在ISE中輸入以下代碼


Function Go-Verbose {

     [CmdletBinding()]Param()

     Write-Verbose "Alright, you prefer talkative functions. First of all, I appreciate your wish to learn more about the common parameter -Verbose. Secondly, blah blah.."

     Write-Host "This is self-explanatory, anyway."

}

再執(zhí)行以下,看看是不是以下結(jié)果,通過這個(gè)例子,你就明白verbose是怎么出來的,這個(gè)單詞是很難翻譯的,只能是通過例子弄明白是什么意思。

Powershell 函數(shù)中的CmdletBinding()是怎么回事?


再舉一個(gè)例子,就是調(diào)用ShouldContinue這個(gè)方法,這個(gè)在寫程序時(shí)還是很重要的,比如你想做一些破壞性的操作,程序?qū)懙慕咽且欢ㄒ粋€(gè)框出來,問一下再去執(zhí)行,那種SilientContinue做法不推薦。

以下還是代碼:

Powershell 函數(shù)中的CmdletBinding()是怎么回事?


這段代碼還是要在函數(shù)執(zhí)行時(shí)加一個(gè) -confirm參數(shù)的。如果想不加這個(gè)參數(shù)也要跳出這個(gè)框來,這樣就需要一個(gè)額外的操作。把環(huán)境變量$ConfirmPreferece 設(shè)置成低??匆韵麓a和執(zhí)行效果。



Function Remove-ByForce {

     [CmdletBinding(SupportsShouldProcess)]

     Param([String]$File)

 

     $ConfirmPreference = "Low"

     If ($PSCmdlet.ShouldContinue("Are you sure that you know what you are doing?","Delete with -Force parameter!")) { 

             Remove-Item $File -Force

     } Else { 

             "Mission aborted!"

     }

}

Remove-ByForce test


Powershell 函數(shù)中的CmdletBinding()是怎么回事?



以上就是兩個(gè)基本的例子,接下來的文章會討論

param()中的[parameter()]對變量的影響。





向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI