Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一些';如果';语句以确定要检查哪些Windows更新?_Windows_Powershell_Scripting_Updates - Fatal编程技术网

如何在一些';如果';语句以确定要检查哪些Windows更新?

如何在一些';如果';语句以确定要检查哪些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') {

我正在写一个令人遗憾的脚本,旨在从Windows7、8和8.1中基本消除Windows10的任何痕迹。几乎是程序的脚本版本。脚本差不多完成了(我想),但是我的一些
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