首页 > 解决方案 > Powershell 如果那时

问题描述

我对 if then 有问题。

    $result = getMachineInfo $rlprddeploy $mdt
"-MachineID-    -LastContactAt-          -LastIP-   -Deployment Receiver Version-"
$machine = $result.MachineID
$result | % { '{0,-10} {1,23} {2,16} {3,20}' -f $_.MachineID, $_.LastContactAt, $_.LastIP, $_.DeploymentReceiverVersion }
#$result | ft -auto

如果 $_.DeploymentReceiverVersion 小于 5.46.54,那么我将发送一个文件进行更新。如果版本是 5.55,则无需执行任何操作。

一个星期以来,我一直在努力解决这个问题,但我无法弄清楚。每个 $_.blahblah 都是从服务器上的 SQL 表中提取的信息。

我们一直在手动发送更新,我想停止它。

标签: sqlpowershellif-statement

解决方案


PowerShell 的 If 语句可以像任何类似 C 的语言一样编写:

if ($true) {Write-Host "True Yo" }

也就是说,你还没有准确地发布你的问题是什么,所以这有点笼统:

创建自定义对象:

$dep = New-Object psobject -Property @{DeploymentReceiverVersion = "5.000.11"; AppName = "OxenTails" }

比较这将带来一个潜在的问题:

$dep.DeploymentReceiverVersion.GetType()

版本是一个字符串,所以比较是比较字符串:

$dep.DeploymentReceiverVersion -lt "5.000.12" 

给出了预期的结果,但是

$dep.DeploymentReceiverVersion -lt "5.000.101"

才不是。

然而,这可以用来比较每组数字:

$parts = $dep.DeploymentReceiverVersion.Split('.')
if ([int]$parts[0] -lt 6 -and [int]$parts[1] -lt 001 -and [int]$parts[2] -lt 101) {
#Do Stuff!
}

此外,正如@TheMadTechnician 所指出的,还有 System.Version 类型[Version]

它可以与其中一种重载方法一起使用:

[Version]::new(parts[0],parts[1], parts[2]) -lt [Version]::new(5,46,54)

哪个更具可读性。


推荐阅读