PowerShell中带有日期时间的交易

问题描述 投票:0回答:1

我编写了一个非常漂亮的PowerShell脚本,该脚本可与VMware PowerCLI一起使用,将几个VM克隆到另一个存储设备,然后在达到一定使用期限时自动将它们删除。在到达月末/月初之前,它似乎工作得很好,然后我用于日期时间的方法似乎失败了,所有克隆都被意外删除。这是重要的部分,而不是包括整个脚本。

首先,创建克隆后,我正在使用以下代码。

$vmdatestamp = (Get-Date).tostring('yyyyMMdd-HHmmss')
new-vm -Name $VM-$vmdatestamp -VM $VM -Datastore $CPFlag -vmhost host.domain.local -Location 'Regular Clone'

[该变量最终在日期为2020年2月14日的情况下创建了一个名为“ VMName-20200214-040022”之类的VM克隆,并且该变量捕获了4 AM,00 Min和22秒。

然后在脚本的后面部分,有一个清理部分,列出了这些克隆的VM并检查日期。目的是如果克隆时间超过3天,则运行delete命令。因此,有一个foreach循环会在特定文件夹“常规克隆”中找到的所有VM上运行。 $ vmls是循环中找到的每个VM的变量。这是我用来检查日期并删除3天以上的代码。

#Grab matched string and doctor it to only look at 8 digit date.
$var1 = $vmls.name
$var2 = $var1 -split '-' | Select-String '\d{8}'
$var3 = $var2 -replace '(?S)'

#Grab todays date in the same 8 digit format then subtract to compare variance.  How old is the clone?
$CompareDate = (Get-Date).tostring('yyyyMMdd')
$var4 = $CompareDate - $var3

      #If clone is older than 3 days, delete it.  Turn this knob based on your requirements.
      if($var4 -gt '3') {

所以最后一个检查$ var4的“ if”语句是否大于3才是我的问题所在。我认为脚本不够聪明,无法弄清楚例如今天是否是第一个减号“-”的工作方式。有人对如何更好地解决这个问题有建议吗?

关于,亚当·泰勒

我编写了一个非常漂亮的PowerShell脚本,该脚本可与VMware PowerCLI一起使用,将几个VM克隆到另一个存储设备,然后在达到一定使用期限时自动将它们删除。 ...

powershell powercli
1个回答
0
投票

Powershell在使用[datetime]类型处理日期和时间方面具有很大的灵活性。可能对此有另一个答案,我待会儿会搜索,但这是一些基本知识。

© www.soinside.com 2019 - 2024. All rights reserved.