編輯,以減少對既定目標PowerShell是否提供了創建函數註釋的方法?
混亂是可以創建任何類型的註釋,可以申請的通用模式的功能?
一個例子可能是一個標準的錯誤處理例程。而不是必須使用錯誤處理函數來實現相同的try/catch結構,那麼可以使用可以修飾函數的屬性或註釋來實現常規模式,而不必在每個函數中使用相同的顯式代碼。
也許這是一個試圖讓PowerShell做一些它並不意味着要做的事情的例子,但是我想避免一些在我的腳本中最常見的重複。
編輯,以減少對既定目標PowerShell是否提供了創建函數註釋的方法?
混亂是可以創建任何類型的註釋,可以申請的通用模式的功能?
一個例子可能是一個標準的錯誤處理例程。而不是必須使用錯誤處理函數來實現相同的try/catch結構,那麼可以使用可以修飾函數的屬性或註釋來實現常規模式,而不必在每個函數中使用相同的顯式代碼。
也許這是一個試圖讓PowerShell做一些它並不意味着要做的事情的例子,但是我想避免一些在我的腳本中最常見的重複。
你只需要從ValidateArgumentsAttribute
類繼承和Validate
方法提供自定義的驗證邏輯:
C#:
Add-Type @‘
using System;
using System.Management.Automation;
public class ValidateIsEvenAttribute : ValidateArgumentsAttribute {
protected override void Validate(object arguments, EngineIntrinsics engineIntrinsics) {
if(LanguagePrimitives.ConvertTo<int>(arguments)%2==1) {
throw new Exception("Not even");
}
}
}
’@
PowerShell的V5:
class ValidateIsOddAttribute : Management.Automation.ValidateArgumentsAttribute {
[void] Validate([object] $arguments, [Management.Automation.EngineIntrinsics] $engineIntrinsics) {
if($arguments%2-eq0) {
throw 'Not odd'
}
}
}
然後你可以應用屬性功能參數:
function f { param([ValidateIsEven()]$i, [ValidateIsOdd()] $j) $i, $j }
f 2 1 #OK
f 2 2 #Error
f 1 1 #Error
謝謝,這是一個很好的答案,因爲它涉及到參數屬性。我修改了這個問題來澄清,因爲我沒有太多嘗試裝飾參數,因爲我希望在不重寫類似代碼的情況下在函數中實現常用模式。 –
有'[ValidateScript()]'。 [這是一個ValidateScript指南](https://powershell.org/2013/05/21/validatescript-for-beginners/),這裏是[Boe Prox參數驗證指南](https://learn-powershell.net/2014/02/04/using-powershell-parameter-validation-to-make-your-day-easily /)以及一些其他驗證方法,如ValidatePattern也可以適用 – BenH
對參數驗證屬性的引用更多是朝着我想裝飾參考現有PowerShell功能的功能的方式點頭致意。回想起來,我可能應該堅持提到註釋,因爲實施常見模式更多是我的興趣所在。 –
看起來您正在詢問函數級別的屬性,類似於[CmdletBinding()]。 –