- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在今天的事件中,我在 azure 中创建测试虚拟机,然后将其删除。由于某种原因,这次我计划创建 100 个测试虚拟机,并且想实现一个调度机制(通过 powershell 或 AzureRunbook),以便创建的服务器可以在 30 天后自动删除...
问题是我可以使用 Powershell 找到云服务的创建日期,但无法找到虚拟机的创建日期。很少有云服务包含我不想删除的旧虚拟机。
我正在考虑 vm 的不同命名约定,以便我可以使用它来删除时间 -
if($vm.name -like "mypattern*")
{
$out1 = $vm.Name
$out2 = $vm.ServiceName
Remove-AzureVM -Name $out1 -ServiceName $out2 -DeleteVHD
sleep -Seconds 60
}
我相信除此之外一定还有更多的方法。有什么替代选择吗?我更喜欢 powershell。
最佳答案
根据我所了解的情况,您正在尝试查找虚拟机的创建日期。所讨论的 VM 是“经典”VM,这意味着它们部署到云服务容器,而不是通过 Azure 资源管理器创建。有些虚拟机已经创建,有些将由您的脚本继续创建。有些云服务容器已经存在了一段时间,有些可能是较新的。
我无法找到通过服务管理 API 检索虚拟机创建日期的方法;然而,如果我们能够到达实际的虚拟机,那么我们还有更多工作要做。下面的脚本假设虚拟机创建日期与虚拟机上的操作系统安装日期相同(我认为这应该是一个很好的指标,我验证了它不是源镜像的日期,而是源镜像的日期)虚拟机创建)。为此,您需要在虚拟机上启用 PowerShell 远程端点(创建虚拟机时默认存在该端点),并且您必须在本地管理员权限下运行该脚本,因为它会与证书存储区混淆。
$remoteCreds = Get-Credential
$maxVMAgeInDays = 30
#Classic VMs
Get-AzureVM | ForEach-Object {
#Need to ensure we have the self-signed VM certificate installed to authenticate and secure the connection.
$winRmCertThumbprint = $_.Vm.DefaultWinRmCertificateThumbprint
$certPath = "Cert:\LocalMachine\Root\$winRmCertThumbprint"
if (!(Test-Path -Path $certPath)){
#Cert for VM isn't found, importing.
$winRmCert = Get-AzureCertificate -ServiceName $_.ServiceName -Thumbprint $winRmCertThumbprint -ThumbprintAlgorithm sha1
$certTempFile = [IO.Path]::GetTempFileName()
$winRmCert.Data | Out-File $certTempFile
# Target The Cert That Needs To Be Imported
$CertToImport = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $certTempFile
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store "Root", "LocalMachine"
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($CertToImport)
$store.Close()
"Imported cert: $certPath"
#clean up temp file
Remove-Item $certTempFile
}
#Retrieve the powerShell Remote port for this machine.
$remoteUri = Get-AzureWinRMUri -ServiceName $_.ServiceName -Name $_.Name
$osInstallDate = Invoke-Command -ConnectionUri $remoteUri -Credential $remoteCreds -ScriptBlock { ([WMI]'').ConvertToDateTime((Get-WmiObject Win32_OperatingSystem).InstallDate) }
$vmAgeInDays = (New-TimeSpan -Start $osInstallDate -End (Get-Date)).Days
if ($vmAgeInDays -gt $maxVMAgeInDays) {
"$($_.Name) VM in $($_.ServiceName) cloud service is older than $maxVMAgeInDays ... you can remove it."
#Add your code to remove the VM
} else {
"$($_.Name) VM in $($_.ServiceName) cloud service is only $($vmAgeInDays) old."
#Do soemthing else or just remove the else.
}
}
该脚本假定您已执行 Add-AzureAccount 并选择了要使用的订阅。它将提示您输入虚拟机的凭据,该特定脚本假定您拥有一个已设置为适用于每个虚拟机的凭据。这可以是您在创建 VM 时提供的凭据,也可以是您随后添加到每个 VM 的正确权限中的凭据。既然您说您通过脚本创建了数百个虚拟机,我的猜测是它们都将具有相同的管理凭据。对于您现有的虚拟机,您可能需要手动添加帐户(这可能会很痛苦,具体取决于您拥有的虚拟机数量)。
该脚本循环遍历每个虚拟机并检查本地计算机上是否加载了 WinRM 证书。如果没有,则会将其拉下来并安装。这是保护远程 PowerShell session 所需的。我从Michael Washam's script on TechNet获取代码。
在我们知道我们拥有保护连接的证书后,他们会执行远程 PowerShell 命令来检索操作系统安装日期(我在 ScioSoft blog 上找到的提示)。最后,它根据该日期检查虚拟机的使用期限,然后可以执行您想要的任何操作。根据您的情况,您可以将其删除。如果您确实想清除所有内容,您需要确保在删除虚拟机时也清除底层磁盘等。
最后,为了改进我建议您删除的任何虚拟机的脚本,您可以通过指纹删除证书来清理您的证书存储。
这适用于经典虚拟机,听起来您已经拥有了。有人已经为您提供了一种通过标记处理基于 ARM 的虚拟机的方法,这将消除实际处理远程命令的需要。
关于azure - 30 天后自动终止 Azure VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32498946/
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
我是 Azure 平台的初学者。我在公司的 Azure 基础架构中遇到了虚拟机问题,在我从操作系统重新启动后,该虚拟机无法启动,我尝试了所有其他故障排除功能,但仍遇到以下问题: 重新部署选项。 我想确
我在 Mac 上使用 XAMPP-VM,我尝试使用 xampp 管理器上显示的地址通过 ssh 连接到 VM: 192.168.65.2 我意识到我不知道 VM 的 root 密码和任何 ssh-ke
我知道你可以在 Dalvik 的 VM 中运行几乎所有的 Java,而你可以在 Java 的 VM 中运行,但是限制不是很清楚。有没有人遇到任何主要的绊脚石?有什么大图书馆有问题吗?任何编译成 Jav
Azure VM 备份失败,出现错误 - GuestAgentSnapshotTaskStatusErrorAzure 备份服务无法与 VM 代理通信以触发快照(以进行备份),因为 VM 代理可能处于
我想知道当虚拟机停止时,虚拟机的软件成本部分是否收费。我想运行 Azure SQL VM Enterprise。 VM 每月的软件成本为“1,116 美元/月”。 如果我停止使用,我仍需支付该软件的费
有 2 台安装了 Proxmox (Proxmox-ve 4.2) 的物理服务器,每台都处理几个虚拟机和容器。这些服务器(几乎)完全隔离,它们之间没有集群/共享存储/附加存储等。 已在 proxmox
我想知道当虚拟机停止时,虚拟机的软件成本部分是否收费。我想运行 Azure SQL VM Enterprise。 VM 每月的软件成本为“1,116 美元/月”。 如果我停止使用,我仍需支付该软件的费
有 2 台安装了 Proxmox (Proxmox-ve 4.2) 的物理服务器,每台都处理几个虚拟机和容器。这些服务器(几乎)完全隔离,它们之间没有集群/共享存储/附加存储等。 已在 proxmox
Parrot Virtual Machine 有什么好处?对于最终用户(软件开发人员)? 例如,如果我可以直接针对 Perl 或 Python 进行编程,我为什么还要在 Parrot 下为它们编程呢?
例如,Python 和 Java 有一个 VM,而 C 和 Haskell 没有。 (如果我错了,请纠正我) 想了想线路两边都有哪些语言,找不到原因。 Java 在很多方面都是静态的,而 Haskel
我知道虚拟机镜像有两种类型:通用型和专用型。 如果操作系统已通用化/取消配置,则必须关闭虚拟机才能将其捕获为 VM 镜像。一旦 VM 被捕获为 VM 镜像,该虚拟机将自动删除。 如果操作系统是专用,则
我知道虚拟机镜像有两种类型:通用型和专用型。 如果操作系统已通用化/取消配置,则必须关闭虚拟机才能将其捕获为 VM 镜像。一旦 VM 被捕获为 VM 镜像,该虚拟机将自动删除。 如果操作系统是专用,则
背景信息 我正在开发一种支持网络的嵌入式设备,旨在与服务器进行通信。因为此服务器将运行 Linux(但我需要 Windows 工具进行开发),我正在运行带有 Ubuntu Server 14.04 的
我有一个 Azure 云服务 mywebapp.cloudapp.net,它由两个 Azure VM - mywebappvm1 和 mywebappvm2 组成。两个虚拟机位于同一可用性集中并具有相
有什么方法可以在不重新启动虚拟机的情况下调整现有虚拟机的大小,还是总是像停止虚拟机然后重新启动一样? 据我了解,我可以更改虚拟机的大小而无需重新启动它。请指导我,因为我不希望虚拟机在调整大小时出现任何
我是 Azure 新手。我正在尝试使用 powershell 在 Azure 中创建资源。 我的要求是从虚拟机创建镜像。我遵循了以下方法: 流程 1:手动执行 通用化虚拟机:登录虚拟机 -> 打开命令
我创建了虚拟网络,并且想要将新虚拟机部署到该虚拟网络。网络 我尝试使用以下命令创建虚拟机: az vm create --resource-group myGroup --name VMTestNet
上下文 作为一个大学项目,我们希望更改 pharo 虚拟机以使用对象表,看看会发生什么。 我们使用pharo-vm clone from github和VMMaker。构建虚拟机工作正常。 首先,我们
我是巴拿马型的新手,刚刚安装,但收到以下错误消息: A different VM with name panamax-vm has been created already. 我试图通过使用 pana
我是一名优秀的程序员,十分优秀!