• wirte function in powershell


    https://github.com/dahlbyk/posh-git/blob/master/src/Utils.ps1#L102

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-6

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters?view=powershell-6

    function Add-PoshGitToProfile {
        [CmdletBinding(SupportsShouldProcess)]
        param(
            [Parameter()]
            [switch]
            $AllHosts,
    
            [Parameter()]
            [switch]
            $AllUsers,
    
            [Parameter()]
            [switch]
            $Force,
    
            [Parameter(ValueFromRemainingArguments)]
            [psobject[]]
            $TestParams
        )
    
        if ($AllUsers -and !(Test-Administrator)) {
            throw 'Adding posh-git to an AllUsers profile requires an elevated host.'
        }
    
        $underTest = $false
    
        $profileName = $(if ($AllUsers) { 'AllUsers' } else { 'CurrentUser' }) `
                     + $(if ($AllHosts) { 'AllHosts' } else { 'CurrentHost' })
        Write-Verbose "`$profileName = '$profileName'"
    
        $profilePath = $PROFILE.$profileName
        Write-Verbose "`$profilePath = '$profilePath'"
    
        # Under test, we override some variables using $args as a backdoor.
        if (($TestParams.Count -gt 0) -and ($TestParams[0] -is [string])) {
            $profilePath = [string]$TestParams[0]
            $underTest = $true
            if ($TestParams.Count -gt 1) {
                $ModuleBasePath = [string]$TestParams[1]
            }
        }
    
        if (!$profilePath) { $profilePath = $PROFILE }
    
        if (!$Force) {
            # Search the user's profiles to see if any are using posh-git already, there is an extra search
            # ($profilePath) taking place to accomodate the Pester tests.
            $importedInProfile = Test-PoshGitImportedInScript $profilePath
            if (!$importedInProfile -and !$underTest) {
                $importedInProfile = Test-PoshGitImportedInScript $PROFILE
            }
            if (!$importedInProfile -and !$underTest) {
                $importedInProfile = Test-PoshGitImportedInScript $PROFILE.CurrentUserCurrentHost
            }
            if (!$importedInProfile -and !$underTest) {
                $importedInProfile = Test-PoshGitImportedInScript $PROFILE.CurrentUserAllHosts
            }
            if (!$importedInProfile -and !$underTest) {
                $importedInProfile = Test-PoshGitImportedInScript $PROFILE.AllUsersCurrentHost
            }
            if (!$importedInProfile -and !$underTest) {
                $importedInProfile = Test-PoshGitImportedInScript $PROFILE.AllUsersAllHosts
            }
    
            if ($importedInProfile) {
                Write-Warning "Skipping add of posh-git import to file '$profilePath'."
                Write-Warning "posh-git appears to already be imported in one of your profile scripts."
                Write-Warning "If you want to force the add, use the -Force parameter."
                return
            }
        }
    
        if (!$profilePath) {
            Write-Warning "Skipping add of posh-git import to profile; no profile found."
            Write-Verbose "`$PROFILE              = '$PROFILE'"
            Write-Verbose "CurrentUserCurrentHost = '$($PROFILE.CurrentUserCurrentHost)'"
            Write-Verbose "CurrentUserAllHosts    = '$($PROFILE.CurrentUserAllHosts)'"
            Write-Verbose "AllUsersCurrentHost    = '$($PROFILE.AllUsersCurrentHost)'"
            Write-Verbose "AllUsersAllHosts       = '$($PROFILE.AllUsersAllHosts)'"
            return
        }
    
        # If the profile script exists and is signed, then we should not modify it
        if (Test-Path -LiteralPath $profilePath) {
            if (!(Get-Command Get-AuthenticodeSignature -ErrorAction SilentlyContinue))
            {
                Write-Verbose "Platform doesn't support script signing, skipping test for signed profile."
            }
            else {
                $sig = Get-AuthenticodeSignature $profilePath
                if ($null -ne $sig.SignerCertificate) {
                    Write-Warning "Skipping add of posh-git import to profile; '$profilePath' appears to be signed."
                    Write-Warning "Add the command 'Import-Module posh-git' to your profile and resign it."
                    return
                }
            }
        }
    
        # Check if the location of this module file is in the PSModulePath
        if (Test-InPSModulePath $ModuleBasePath) {
            $profileContent = "`nImport-Module posh-git"
        }
        else {
            $modulePath = Join-Path $ModuleBasePath posh-git.psd1
            $profileContent = "`nImport-Module '$modulePath'"
        }
    
        # Make sure the PowerShell profile directory exists
        $profileDir = Split-Path $profilePath -Parent
        if (!(Test-Path -LiteralPath $profileDir)) {
            if ($PSCmdlet.ShouldProcess($profileDir, "Create current user PowerShell profile directory")) {
                New-Item $profileDir -ItemType Directory -Force -Verbose:$VerbosePreference > $null
            }
        }
    
        if ($PSCmdlet.ShouldProcess($profilePath, "Add 'Import-Module posh-git' to profile")) {
            Add-Content -LiteralPath $profilePath -Value $profileContent -Encoding UTF8
        }
    }
  • 相关阅读:
    图片上传前预览、压缩、转blob、转formData等操作
    Vue背景图打包之后访问路径错误
    图片上传前预览的功能
    总结div里面水平垂直居中的实现方法
    IE浏览器报Promise未定义的错误、解决vuex requires a Promise polyfill in this browser问题
    普通项目转换成maven项目
    HTTP 错误 404.0
    电商项目系列文档(四):售后的设计(退换货)
    Sqlserver数据库还原.bak文件失败的两个问题
    数据库字段顺序的【坑】
  • 原文地址:https://www.cnblogs.com/chucklu/p/9603454.html
Copyright © 2020-2023  润新知