创建变量

时间:2018-02-06 00:45:33

标签: powershell azure

使用Powershell变量仍然相当新,并且试图理解它的语法和功能时有点困惑。

在创建新VM时Azure's documentation,它声明$ VM变量,然后在下一个变量创建中使用相同的变量:

$vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName myVM -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest
$vm = Set-AzureRmVMOSDisk -VM $vm -Name myOsDisk -DiskSizeInGB 128 -CreateOption FromImage -Caching ReadWrite

我坚持的是在以这种方式创建变量时幕后发生的事情。每次都会覆盖$ vm变量吗?如果我跑步'稍后在powershell控制台上使用$ vm,是否可以运行此序列,或者由于$ vm的前2个实例不再存在而抛出错误?

谢谢!

3 个答案:

答案 0 :(得分:0)

每次后续通话都会更新它。 $vm的创建类似于:

$vm = New-AzureRmVMConfig ...

并使用其他调用进行更新:

$vm = Set-AzureRmVMOSDisk -VM $vm ...    
$vm = Add-AzureRmVMNetworkInterface -VM $vm ...
$vm = Set-AzureRmVMBootDiagnostics -VM $vm ...

只要您不在其他地方覆盖它,您就可以在以后的任何地方使用它。

答案 1 :(得分:0)

  

每次都会覆盖$ vm变量吗?

UserControl有许多属性,每个Azure powershell都会向其添加一些信息(不相同),因此变量$vm不会被覆盖。

您可以这样打印:

$vm

然后使用run其他命令将向其中添加一些信息。

希望这有帮助。

答案 2 :(得分:0)

您显示的每个命令都会输出Azure虚拟机对象。当您在命令前加DataTable gridTable; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { gridTable = getTable(); FillGrid(gridTable); dataGridView1.DataSource = gridTable; } private DataTable getTable() { DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(string)); dt.Columns.Add("Value1", typeof(int)); dt.Columns.Add("Value2", typeof(int)); dt.Columns.Add(GetFormulaColumn()); return dt; } private DataColumn GetFormulaColumn() { DataColumn dc = new DataColumn("Result", typeof(int)); dc.Expression = "Value1 * Value2"; return dc; } private void FillGrid(DataTable dt) { for (int i = 0; i < 10; i++) { dt.Rows.Add("ID" + i, i, i + 3); } } 时,该变量被分配给发出的命令的输出。您可以使用所需的任何变量(不包括一些特殊的保留变量)。您可以轻松使用$vm =代替$FileServer =,只要您在任何时候引用$vm = $FileServer,它就可以正常工作}。

原始命令$vm创建由变量$vm = New-AzureRmVMConfig捕获的原始Azure虚拟机对象。每个连续的命令修改该对象,并输出该对象的修改版本。因为每次你确实覆盖变量时都会捕获输出,每次它本身都是一个稍微修改过的版本。

正如您可以使用任何您想要的变量一样,您不需要重复使用相同的变量,并且每次都可以使用一个新变量:

$vm

然后在最后,您可以引用$BaseVM = New-AzureRmVMConfig -VMName myVM -VMSize Standard_D1 $VMOS = Set-AzureRmVMOperatingSystem -VM $BaseVM -Windows -ComputerName myVM -Credential $cred -ProvisionVMAgent -EnableAutoUpdate $VMImage = Set-AzureRmVMSourceImage -VM $VMOS -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest $VMOSDisk = Set-AzureRmVMOSDisk -VM $VMImage -Name myOsDisk -DiskSizeInGB 128 -CreateOption FromImage -Caching ReadWrite 来查看应用了所有修改的VM,甚至可以针对$VMOSDisk引用它,以查看自您最初声明对象以来所有更改的内容。 / p>