Ваш код имеет несколько проблем,
IF ($a = "True")
Вы не можете использовать =
равно, вы должны использовать -eq
. Кроме того, «True» - это String
, содержащий 4 символа, значения boolean
для True и False равны $true
и $false
, поэтому ваш код становится:
IF ($a -eq $true)
Но вы можете упростить это и дальше:
IF ($a)
Ниже я бы написал эту логику:
if(-not (Test-Path -Path "C:\Program Files\7-Zip")){
Write-Host "Installing 7-Zip...";
# do stuff ...
}else{
Write-Host "7-Zip already installed";
}
(Как и в математике, вы начинаете с самых внутренних скобок и работаете вовне, в данном случае Test-Path -Path "C:\Program Files\7-Zip"
first - что в моем случае возвращает $true
. -not()
сводит на нет результат выражения в скобках (
)
изменив его на $false
).
Учитывая, как вы планируете его использовать, вам, вероятно, следует заключить его в функцию, чтобы вы могли написать логику один раз и использовать ее повторно, не дублируя код, такой как:
#Simple function
function InstallIfNessersary([String] $installDir, [String] $chocoPackage){
if(-not (Test-Path -Path $installDir)){
Write-Host "Installing Package $chocoPackage...";
#Do stuff with $chocoPackage
}else{
Write-Host "7-Zip already installed";
}
}
#Call the function for each app
InstallIfNessersary -installDir "C:\Program Files\7-Zip" -chocoPackage 7zip
InstallIfNessersary -installDir "C:\Program Files\X" -chocoPackage X
InstallIfNessersary -installDir "C:\Program Files\Y" -chocoPackage Y
Который на моем ПК выводит:
7-Zip already installed
Installing Package X...
Installing Package Y...