我正在编写一些 powershell cmdlet 来自动配置 Azure 订阅。其中一个用例是让开发人员配置他们自己的环境。目前这需要大约 20 个步骤并且容易出错。与使用 Microsoft 的 Azure GUI 和一组指令相比,交给他们一些默认的 azure cmdlet 会导致更多错误。我想要一个脚本,它可以在配置过程中牵着他们的手,并抽象出大量的簿记和错误检查。
我尝试在 Powershell 脚本中执行所有这些操作,但这会变得混乱:
Function SelectSubscription()
{
$match = $False;
while(!($match))
{
Write-Host "Enter a subscription from the following list:";
DisplaySubscriptions;
$global:subscription = Read-Host " ";
(Get-AzureSubscription).GetEnumerator() | ForEach-Object
{
if ($_.SubscriptionName -eq $subscription)
{
Write-Host "Setting default subscription to: $subscription";
Set-AzureSubscription -DefaultSubscription $subscription;
$match = $True;
};
};
if (!($match))
{
Write-Host "That does not match an available subscription.`n";
};
};
}
(这会显示您可以在 .publishsettings 文件中看到的当前订阅,并提示您从中进行选择。如果您的输入无效,它会再次询问。)
我想要的是一个像这样的自定义 cmdlet Set-MyAzureSubscription
,其中包含所有这些逻辑。稍后我可以将它连接到Get-Help
.
所以我在 VS2010 中设置了 cmdlet,我想Get-AzureSubscription
从自定义 cmdlet 内部调用。我可以通过打开一个powershell脚本的实例来调用cmdlet......然后以编程方式粘贴文本......但这似乎不太理想。
更多关于该方法的信息:Call azure powershell cmdlet from c# application failed
还有另一种方法吗?这就是我目前在 C# 中所拥有的。
namespace Automated_Deployment_Cmdlets
{
[Cmdlet(VerbsCommon.Set, "CustomSubscription", SupportsShouldProcess=true)]
class CustomSubscription : PSCmdlet
{
[Parameter(Mandatory=true, ValueFromPipelineByPropertyName=true)]
public string DefaultSubscription { get; set; }
protected override void ProcessRecord()
{
base.ProcessRecord();
// Call Get-AzureSubscription, then do some stuff -- as above.
}
}
}