Powershell если потом - PullRequest
       3

Powershell если потом

0 голосов
/ 12 октября 2018

У меня проблема с 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 на сервере.

Мы отправляли обновления вручную, и я хотел бы остановить это.

1 Ответ

0 голосов
/ 12 октября 2018

Оператор 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)

, который немного более читабелен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...