PowerShell 技能连载 - 将哈希表用作条件化的代码库

脚本中平时经常需要检测一个文件夹是否存在,如果不存在则创建:

#requires -Version 1

$path = 'c:\testfolder'
$exists = Test-Path -Path $path

if ($exists)
{
  $null = New-Item -Path $path -ItemType Directory
  Write-Warning -Message 'Folder created'
}
else
{
  Write-Warning -Message 'Folder already present'
}

以下是一种很不常见的方法,以一种不同的概念实现相同的功能:

#requires -Version 1

$Creator = @{
  $true = { Write-Warning 'Folder already present'}
  $false = {$null = New-Item -Path $Path -ItemType Directory
            Write-Warning 'Folder created'}
}


$Path = 'c:\testfolder2'
& $Creator[(Test-Path $Path)]

实际上,这段脚本用了一个哈希表($Creator))来存储两个脚本块,而它的键是 $true$false

现在,根据文件夹存在与否,哈希表将返回合适的脚本块,接下来被 &(调用)操作符执行。

哈希表用这种方式来模拟从句。

PowerShell 技能连载 - 将哈希表用作条件化的代码库

http://blog.vichamp.com/2015/09/18/using-hash-table-as-conditional-code-repository/

作者

吴波

发布于

2015-09-18

更新于

2022-07-06

许可协议

评论