PowerShell 技能连载 - 创建写保护的函数
PowerShell 的函数缺省情况下可以在任何时候被覆盖,而且可以用 Remove-Item
来移除它:
1 | function Test-Lifespan |
对于安全相关的函数,您可能希望以某种不会被删除的方式创建它们。以下是实现方法:
1 | $FuncName = 'Test-ConstantFunc' |
这个新函数是用 Set-Item
直接在 function:
驱动器内创建。通过这种方式,您可以对该函数增加新的选项,例如 Constant
和 AllScope
。这个函数能够以期待的方式工作:
1 | PS C:\> Test-ConstantFunc -Text $env:username |
“Constant
“ 确保该函数无法被覆盖或是被删除:
1 | PS C:\> function Test-ConstantFunc { "Got you!!" } |
更重要的是,”AllScope
“ 确保该函数无法在子作用域中被掩盖。有了写保护之后,在一个常见的用独立的子作用于来定义一个同名的新函数的场景中:
1 | & { |
结果是,因为 “AllScope
“ 的作用,将原来的保护函数覆盖的操作不再起作用:
Cannot write to function Test-ConstantFunc because it is read-only or constant.
At line:4 char:3
+ function Test-ConstantFunc { "I am a second function in a child sco ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (Test-ConstantFunc:String) [], Sessio
nStateUnauthorizedAccessException
+ FullyQualifiedErrorId : FunctionNotWritable
Hello , I cannot be removed!
PowerShell 技能连载 - 创建写保护的函数
http://blog.vichamp.com/2018/11/22/creating-write-protected-functions/