dev.core.utils.psm1
function New-DirectoryIfNotExist { [CmdletBinding()] param ([Parameter(Mandatory=$true, Position=0)][string]$Path); if (Test-Path -Path $Path -PathType Container) { Get-Item -Path $Path; } else { New-Item -Path $Path -ItemType Directory -Force; } } function Import-ModuleIfNotExist { [CmdletBinding()] param ([Parameter(Mandatory=$true, Position=0)][string]$Name, [switch]$Global); if (!(Get-Module -Name $Name)) { if (!(Get-Module -Name $Name -ListAvailable)) { Write-Verbose "Installing ${Name} module"; Install-Module -Name $Name; } Import-Module -Name $Name -Global:$Global -DisableNameChecking; } } function Add-TypeIfNotExist { [CmdletBinding()] param([string]$TypeName, [string]$TypeDefinition); if (-not ([System.Management.Automation.PSTypeName]$TypeName).Type) { Add-Type -TypeDefinition $TypeDefinition; } } function Reset-Module { [CmdletBinding()] param ([Parameter(ValueFromPipelineByPropertyName=$true)][string[]]$Name); process { foreach ($ModuleName in $Name) { $Module = Get-Module -Name $ModuleName; if (!$Module) { throw "Module $ModuleName is not found."; } Write-Verbose "Removing module $ModuleName"; Remove-Module -Name $ModuleName -Force; Write-Verbose "Importing $($Module.Path)"; Import-Module $Module.Path -Global; } } } function Test-RunAsAdmin { [OutType([bool])] [CmdletBinding()] param(); try { $identity = [Security.Principal.WindowsIdentity]::GetCurrent(); $principal = New-Object Security.Principal.WindowsPrincipal -ArgumentList $identity; return $principal.IsInRole( [Security.Principal.WindowsBuiltInRole]::Administrator); } catch { return $false; } } function Confirm-RunAsAdmin { [CmdletBinding()] param([string]$Command); if (!(Test-RunAsAdmin)) { throw "The ${Command} command must be executed with administrator privilege."; } } function Merge-HashTable { param( [hashtable] $Table, [hashtable] $With) if (!$Table) { return $With; } elseif (!$With) { return $Table; } else { $MergedTable = $Table.Clone(); foreach ($key in $With.Keys) { $MergedTable[$key] = $With[$key]; } return $MergedTable; } } Export-ModuleMember -Function New-DirectoryIfNotExist; Export-ModuleMember -Function Import-ModuleIfNotExist; Export-ModuleMember -Function Add-TypeIfNotExist; Export-ModuleMember -Function Reset-Module; Export-ModuleMember -Function Test-RunAsAdmin; Export-ModuleMember -Function Confirm-RunAsAdmin; Export-ModuleMember -Function Merge-HashTable; |