文档
function Add-Access {
<#
.SYNOPSIS
文件和目录添加访问权限
.DESCRIPTION
Icacls的包装,能够对目录和文件添加三种权限。
读取,修改,完全控制
.PARAMETER Path
需要添加权限的{文件 | 目录}
.PARAMETER User
授予访问权限的用户
.PARAMETER Access
具体的访问权限枚举类型{"Read" | "Modify" | "Full"}。
小技巧 -Access 空格,TAB键可以补全,在三个值之间切换
.EXAMPLE
Add-Access -Path c:\temp -User Bob -Access Read
为用户Bob在C:\temp文件夹中添加只读权限
.EXAMPLE
Add-Access -Path c:\temp -User Bob -Access Modify
为用户Bob在C:\temp文件夹中添加修改权限
.NOTES
General notes
#>
具体代码在系列八,在函数中添加的文档.....
}
文档的用法,用的是. .源加载,会把函数保留在内存中。文档的具体用法请参考系列五。
测试
PowerShell的测试框架是Pester.
BeforeAll {
. $PSCommandPath.Replace('.Tests.ps1', '.ps1')
$path = 'C:\users\sgq1219\temp'
$user = 'Bob'
mkdir $path
"Hello world!" | out-file $path\hello.txt -Encoding utf8
$base = Get-Access -Path $path
}
Describe "Test-Access" {
It 'Test var'{
'a' | Should -Be 'a'
}
It 'Test Get-Access'{
$s = icacls $path
$d = Get-Access $path
$s | Should -Be $d
}
It 'Add-Access'{
new-localuser -name $user -NoPassword
Add-Access -Path $path -User $user -Access 'Read'
[bool]$s = Get-Access -Path $path | Select-String -Pattern '(Bob):\(Oi\)\(Ci\)\(R\)' -Quiet
$s | Should -Be $true
Add-Access -Path $path -User $user -Access 'Modify'
[bool]$s = Get-Access -Path $path | Select-String -Pattern '(Bob):\(Oi\)\(Ci\)\(M\)' -Quiet
$s | Should -Be $true
Add-Access -Path $path -User $user -Access 'Full'
[bool]$s = Get-Access -Path $path | Select-String -Pattern '(Bob):\(Oi\)\(Ci\)\(F\)' -Quiet
$s | Should -Be $true
}
It "Remove-Access"{
Remove-Access -Path $path -User $User
$s = Get-Access -Path $path | Select-String -Pattern '(Bob):\(Oi\)\(Ci\)' -Quiet
$s = $s -as [bool]
$s | Should -Be $false
}
It "Reset-Access"{
Reset-Access -Path $Path
$s = Get-Access -Path $Path
$s | Should -Be $base
}
}
AfterAll{
remove-item -Path $path -Force -Recurse
Remove-LocalUser -Name $user
}
基本上都是常规操作,如果用过其它语言的测试框架。步骤基本一样,比如python的pytest。 在顶上设置前置条件,中间执行函数测试,最后清理测试环境。 Python用assert,PowerShell用Should。但是原理都是一样的都是用的断言,执行一些操作,然后读取输出,或者查询信息,看和预期的是不是一样。