如何在一些';如果';语句以确定要检查哪些Windows更新?
我正在写一个令人遗憾的脚本,旨在从Windows7、8和8.1中基本消除Windows10的任何痕迹。几乎是程序的脚本版本。脚本差不多完成了(我想),但是我的一些如何在一些';如果';语句以确定要检查哪些Windows更新?,windows,powershell,scripting,updates,Windows,Powershell,Scripting,Updates,我正在写一个令人遗憾的脚本,旨在从Windows7、8和8.1中基本消除Windows10的任何痕迹。几乎是程序的脚本版本。脚本差不多完成了(我想),但是我的一些if语句中的逻辑似乎会执行,即使变量不是真的 下面是要记住的部分,为了清晰起见,在脚本前面添加了一行创建$Caption变量: $Caption = (Get-WmiObject win32_operatingsystem).caption if ($Caption = 'Windows 8.1 Professional') {
if
语句中的逻辑似乎会执行,即使变量不是真的
下面是要记住的部分,为了清晰起见,在脚本前面添加了一行创建$Caption
变量:
$Caption = (Get-WmiObject win32_operatingsystem).caption
if ($Caption = 'Windows 8.1 Professional') {
if (Get-Hotfix -id KB3044374) {
Wusa /uninstall /kb:3044374 /quiet
Start-Sleep -s 30
Hide-WUUpdate -KBArticleID KB3044374 -Force
Start-Sleep -s 20
}
}
if ($Caption = 'Microsoft Windows 7 Professional') {
if (Get-Hotfix -id KB2952664) {
wusa /uninstall /kb:2952664 /quiet
Start-Sleep -s 30
Hide-WUUpdate -KBArticleID KB2952664 -Force
Start-Sleep -s 20
}
if (Get-Hotfix -id KB2990214) {
wusa /uninstall /kb:2990214 /quiet
Start-Sleep -s 30
Hide-WUUpdate -KBArticleID KB2990214 -Force
Start-Sleep -s 20
}
}
它不是一个完全的交易破坏者,因为当没有找到用于另一版本Windows的更新时,代码仍然会执行,并给出简单的错误消息,但我想修复此错误以保持良好的编程原则。Get-Hotfixcmdlet不返回布尔值。如果目标系统上存在对象,则返回包含信息的对象。If、Else运算符期望布尔(逻辑1或0)输入正常工作 您要做的是使用measure(
measure Object
)cmdlet,如下所示:
$m = get-hotfix -id KB3124200 | measure
if ($m.Count -gt 0) { //execute code if hotfix is present // }
这将为If语句提供一个准确的输出
编辑:此行:
If($Caption='MicrosoftWindows7 Professional'){
应该是:
If ($Caption -eq 'Microsoft Windows 7 Professional')
包含适用于PowerShell比较运算符的良好资源。实际上,get hotfix命令按预期工作;如果存在更新,则它似乎等于1,如果不存在,则等于0。问题是,它们都是在第一时间运行的,而不管释放的“if”语句中给出的标题是否为true、 您提供的相同逻辑能否解决我在Windows标题if语句中的问题?我刚刚发布了一个更新的答案。单个“=”是赋值运算符,而不是比较运算符。在PowerShell中,您使用了-eq。这就成功了!感谢您的澄清,我的脚本很高兴(ier)现在。没问题。很高兴我能提供帮助!观察到这种行为的原因是
=
是PowerShell中的赋值运算符,而不是比较运算符。由于字符串已成功分配给变量$Caption
,因此表达式的计算结果为$true
。