如何将不同的Powershell宏合并为一个?

如何将不同的Powershell宏合并为一个?,powershell,Powershell,自从.NETCore问世以来,我越来越多地使用命令行作为工作方式,一般来说,我使用了很多PowerShell 虽然VisualStudio代码对命令行非常友好,但对它的老大哥来说却不是这样 为了改善这种情况,我在$PROFILE文件中添加了以下内容 function Execute-VisualStudioAsAdmin { if ($args.Count -gt 0) { Start-Process "${env:ProgramFiles(x86)}\Micro

自从.NETCore问世以来,我越来越多地使用命令行作为工作方式,一般来说,我使用了很多PowerShell

虽然VisualStudio代码对命令行非常友好,但对它的老大哥来说却不是这样

为了改善这种情况,我在$PROFILE文件中添加了以下内容

function Execute-VisualStudioAsAdmin
{
    if ($args.Count -gt 0)
    {
        Start-Process "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe" $args -Verb RunAs
    }
    else
    {
        Start-Process "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe" -Verb RunAs
    }
}

Set-Alias vsa Execute-VisualStudioAsAdmin -Option ReadOnly

Set-Alias vs "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe" -Option ReadOnly
现在我可以做了

PS> vs

PS> vsa

PS> vs .\Solution.sln

PS> vsa .\Solution.sln
一切正常,但不是我想要的那么好。也许我想得太多了,但我想知道是否有办法创建一个更好的函数,并通过传递不同的参数让两个别名都使用它

提前谢谢

您想要的是:

function Start-VisualStudio {
    [CmdletBinding()]
    [Alias("vs")]
    param(
        [Parameter()]
        [switch]$AsAdmin,
        [Parameter(
            Mandatory = $false,
            ValueFromRemainingArguments = $true
        )]
        [string[]]$ArgumentList
    )
    process {
        $parameters = @{
            FilePath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe"
        } 
        if ($AsAdmin.ToBool()) {
            $parameters["Verb"] = "RunAs"
        }
        # Allow no null or empty arrays or values
        $ArgumentList  = @($ArgumentList | where {"$_" -ne ""})
        if ($ArgumentList.Count -gt 0) {
            $parameters["ArgumentList"] = $ArgumentList 
        }
        Start-Process @parameters
    }
}
示例:

vs
vs .\Solution.sln
vs .\Solution.sln -AsAdmin
解释:

vs
vs .\Solution.sln
vs .\Solution.sln -AsAdmin
[CmdletBinding()]
使函数像编译的cmdlet一样工作

[Alias()]
允许您在函数中定义别名

ValueFromRemainingArguments
从所有非
-AsAdmin
的参数生成一个数组


@参数
称为“飞溅”

@Kralizek不客气。我添加了更多的文档链接,并对代码进行了一些改进。