sql - 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 表中提取的信息。
我们一直在手动发送更新,我想停止它。
解决方案
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)
哪个更具可读性。
推荐阅读
- c# - 实现`IComparable时不抛出的原因
`? - python-3.x - 尽管我安装了 tesseract 并将其添加到路径中,但它不起作用
- php - add_Ajax 不显示我选择的数量
- xamarin - 当我使用 CrossMedia.Current.Initialize(); 时无法为 iOS 构建解决方案;使用 Xamarin 表单
- python - pandas read_csv() skiprows=[0] 给出问题?
- tomcat - 添加Tomcat部署限制
- java - Java8如何使用流和lambda将3级嵌套列表转换为嵌套HashMap
- google-maps - 在初始化器中只能访问静态成员 - 完成器
(与谷歌地图一起颤抖) - swift - 通过文件夹参考在 Interface Builder 中填充 NSImage
- javascript - 如何让我的机器人创建/克隆另一个语音通道?