使用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个实例不再存在而抛出错误?
谢谢!
答案 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>