使用PowerShell获取虚拟服务器快照……(第三部分)

这是我第三次发布在本系列。在第一个帖子中,我描述了这个脚本需要的不同组件。然后在第二篇文章中,我开始解释脚本的第一部分是如何工作的。现在,在第三篇文章中,我们将深入到脚本的更丰富的部分,并找出用于进行VM快照的代码。让我们开始吧!

首先,我们循环运行vm并暂停每个vm:

foreach(服务器服务器)美元{#我们扩展虚拟机的存储路径信息#接下来我们用一些逻辑虚拟机是否正在运行。#现在是一些进步的乐趣!

#首先,我们需要为VM本身创建一个对象。

VM = MSVS.findVirtualMachine美元($ Server.Name)

与VS对象一样,我们也需要设置VM对象的安全性。

零美元= [Microsoft.VirtualServer.Interop.Powershell]:: SetSecurity (VM)美元

#我们还需要获取一些VMs文件的位置信息。

#注意,这个脚本只有在所有文件都被找到的情况下才能工作

VMC文件的位置。

$Drive =分割路径$VM。文件限定符

$Path =分割路径$VM.File

带有位置信息的#对象(有点像松鼠把坚果藏起来了!)

add-member -inputObject $Server -membertype noteProperty '

-名称“驱动器”-价值$驱动器

add-member -inputObject $Server -membertype noteProperty '

-name“Path”-value $Path

如果($ VM。州情商5){

#如果VM正在运行,我们需要暂停它。

进步= VM.Save美元()

零美元= '

[Microsoft.VirtualServer.Interop.Powershell]:: SetSecurity(进步)美元

而($进步。100年PercentCompleted lt) {

write progress - activity "Saving - $($Server.Name)"”

地位“进步:”

-PercentComplete (Progress.PercentCompleted美元)

}

需要声明脚本是否暂停了VM。

add-member -inputObject $Server -membertype noteProperty '

-name“pause”-value“Yes”

write progress -Status“Done”-completed $True

}

其他{

需要声明脚本是否暂停了VM。

add-member -inputObject $Server -membertype noteProperty '

- name“暂停”价值“不”

}

}

好吧,这有点代码只是暂停虚拟机。下一步是为每个VM拍一个快照:

这里是我们开始使用vshadow.exe #的地方。这里有些不同。我用的是脚本#然后使用正则表达式从文件中删除这些信息。#接下来,我们将该信息添加到驱动器对象。

foreach ($Drive in $Drives){

write progress - activity“take shapshot - $($Drive.Drive)””

地位“袖手旁观……”

$Null = .\Resources\vshadow.exe -script=var -p $Drive.Drive

#开关参数写影子拷贝设置ID到一个VAR文件。

$ID = get-content var

$ ID =(正则表达式)::匹配($ ID, ' (? < = SHADOW_ID_1 = {) [^ " \ r \ n] * (? =}) ')

add-member -inputObject $Drive -membertype noteProperty '

$ID[0].toString()

我们也删除了那个var文件

remove-item var

}

好了,这篇文章就到这里。在我的下一个帖子中,我们将完成剧本。请记住格式。此外,该脚本中的项没有经过优化。我这样做是有原因的,因为这样更容易理解。第二,我去掉了所有的消息传递、错误处理和日志记录。我生产脚本往往有点过度处理事情。但是,再一次…如果这成为一个备份解决方案,那么它需要完美地工作。考虑到这一点,如果使用了这段代码,您可能需要将这些内容添加回去。

加入网络世界社区有个足球雷竞技app脸谱网LinkedIn对最重要的话题发表评论。
相关:

版权©2007Raybet2

工资调查:结果在