gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:35:54 25 4
gpt4 key购买 nike

自从 .NET Core 出来后,我越来越多地使用命令行作为工作方式,并且通常我使用了很多 PowerShell。

虽然 Visual Studio Code 对命令行非常友好,但对于它的老大哥来说却不是这样。

为了改善这种情况,我在 $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

解释:

[CmdletBinding()] 使函数像已编译的 cmdlet 一样工作。 => MS Docs

[Alias()] 允许您在函数内定义别名。 => MS Docs

ValueFromRemainingArguments 从所有不是 -AsAdmin 的参数创建一个数组。 => MS Docs

@parameters 被称为“splatting”。 => MS Docs

关于powershell - 如何将不同的 Powershell 宏合并为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53813341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com