Использование PowerShell для обнаружения и удаления определенного типа программного обеспечения - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу изменить приведенный ниже скрипт, который раньше работал, но теперь он не работает.

Цель этого скрипта - удалить и удалить все Microsoft Office 2010, 2013, 2016 любая версия ( Стандарт или Профессионал ) 32 и 64 бит.

Запись в журналфайл при ошибке.

Ниже приведен скрипт, который я пытался изменить, но он не работает:

$AppDisplayName = 'Office'
$TARGETDIR = 'C:\LOGS'
$global:uninstallLog = Join-Path $TARGETDIR uninst.log

$WhatIfPreference = $true
$global:ShouldProcess = $false
$savedVerbosePreference = $VerbosePreference
$VerbosePreference = 'Continue'

$VerbosePreference = $savedVerbosePreference
$WhatIfPreference = $false

function Write-Log {
    Param (
        [Parameter(Mandatory)]
        [String]$Message,
        $Color = 'Green',
        [string]$logfile = $global:uninstallLog
    )
    Process {
        $msg = '[{0:dd\MM\yyy HH:mm}{1}' -f [datetime]::Now, $Message
        if($logfile){$msg | Out-File $logfile -Encoding ascii}
        $msg | Write-Host -ForegroundColor $Color
    }
}

function Get-UninstallInfo {
    Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall |
        Get-ItemProperty |
        Where-Object { $_.DisplayName -match $AppDisplayName}
}

New-Item $TARGETDIR -ItemType Directory -Force

Get-UninstallInfo |
    ForEach-Object{
        Write-Verbose "Processing $($_.DisplayName)"
        Try {
            if ($_.DisplayName -match '365') {
                Write-Log "$($ENV:COMPUTERNAME) is already using O365 , no need to uninstall"
            } else {
                if($_.UninstallString -match '{(.*)}'){
                    $productCode = $matches[1]
                    Write-Log "Non Office 365 Detected - $productcode - Querying Uninstall command"
                    $arglist = '/x', $productCode, '/qn', '/norestart', '/L*v', $uninstallLog
                    Write-Verbose "ProductCode is set to $productCode"
                    if($ShouldProcess){
                        Write-Log "Uninstall command detected as $($_.UninstallString) Attempting silent uninstall"
                        Start-Process msiexec.exe -ArgumentList $arglist -Wait -NoNewWindow -ErrorAction Stop
                    } else { 
                        Write-Verbose '"$ShouldProcess" is set to "$false"'
                    }    
                } else {
                    Write-Log 'Product code not found' -Color Red
                }
            }
        }
        Catch {
                Write-Log "Error: $($_.Exception.Message)" -Color Red
            }
        }

Это журнал ошибок:

The "=" operator is missing after a named argument.
At line:7 char:29

Missing function body in function declaration.
At line:17 char:2

Missing function body in function declaration.
At line:23 char:2
...