powershell - Powershell 报告错误的变量值
问题描述
stackoverflow 的新手。多年来一直是潜伏者,但现在需要帮助。我正在为 MSP 编写一个简单的脚本,以检测一组基本应用程序,如果未安装,则为该应用程序运行巧克力安装命令。当我以管理员身份在 ISE 中运行它时,即使它不是真的,它也会报告所有变量值的真值。如果我只运行测试路径并告诉它写入主机它的值是正确的。但是,当全部一起运行时,它总是会返回 True。有人可以帮我调查一下吗?
#Are programs installed?
$a = Test-Path "C:\Program Files\7-Zip" IF ($a = "True") {Write-Host "7-zip is installed"} ELSE {Write-Host "7-zip is not installed, install command sent" choco install 7zip -y}
$b = Test-Path "C:\Program Files\Mozilla Firefox" IF ($b = "True") {Write-Host "Firefox is installed"} ELSE {Write-Host "Firefox is not installed, install command sent"}
$c = Test-Path "C:\Program Files (x86)\Adobe\Acrobat Reader DC" IF ($c = "True") {Write-Host "Adobe Reader is installed"} ELSE {Write-Host "Adobe Reader is not installed, install command sent"}
$d = Test-Path "C:\Program Files (x86)\Google\Chrome" IF ($d = "True") {Write-Host "Chrome is installed"} ELSE {Write-Host "Chrome is not installed, install command sent"}
解决方案
您的代码有一些问题,
IF ($a = "True")
您不能使用=
等号,您必须使用-eq
. 此外,“True”是一个String
包含 4 个字符的boolean
值,True 和 False的值为$true
and $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"
首先 - 在我的情况下返回$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
在我的 PC 上输出:
7-Zip already installed
Installing Package X...
Installing Package Y...
推荐阅读
- excel - 突出显示一行中两个相邻列中的数据实例在不同行中重复的实例
- python-3.x - 如何干净地处理彼此非常相似的多种情况
- django - 用于创建和更新博客帖子的自定义表单会出现“找不到页面”错误
- java - 如何将 sqlite 数据库复制到内存?
- jenkins - 詹金斯的一个好的学习路径是什么?
- python - 将 for 循环中的多行合并到一个列表中
- windows - 需要更新指针的 Windows 或自定义消息是否可利用?
- angular - 如何为使用 Jest 的 NgRx 项目配置 Bazel?
- windows - 我应该在 Windows 2016 上使用 Docker EE 在 Windows 上使用哪些图像
- node.js - 将数据存储在 express、node、react 和 react native 中(cookies、sessions、localstorage、asyncstorage)