Software de desinstalación remota a través de powershell

Software de desinstalación remota a través de powershell

Tengo un usuario que trabaja desde casa, pero está conectado a nuestra red interna. Tengo un programa de acceso remoto (LANDESK) que puedo conectar a su sistema, pero según la política de nuestra oficina, no puedo eliminar programas a menos que haya iniciado sesión en mi cuenta de administrador especial. Cambiar de cuenta desconecta a este usuario de la VPN, lo que efectivamente me expulsa de su sistema.

Entonces, como usuario bastante n00b de PowerShell, estoy intentando encontrar un medio para ejecutar un comando para ejecutar el desinstalador del software como mi cuenta de administrador mientras él todavía está conectado. Preferiblemente en silencio. Ventanas 10 v1803. El software es SSMS 2014 si eso ayuda.

Gracias por las sugerencias.

Respuesta1

Dentro de PowerShell, esto es muy fácil de hacer.

El siguiente bloque de script tomará el nombre de una computadora, su nombre de usuario y contraseña, se conectará a la computadora remota y enumerará todo el software instalado por nombre:

$computerName = "SomeComputerName"
$yourAccount = Get-Credential
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
    Get-WmiObject Win32_Product | Select Name
}

Cuando tenga el nombre del producto que desea desinstalar de forma remota, puede realizar una desinstalación de esta manera:

$computerName = "SomeComputerName"
$appName = "AppName"
$yourAccount = Get-Credential
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
    Get-WmiObject Win32_product | Where {$_.name -eq $appName} | ForEach {
        $_.Uninstall()
    }
}

En los ejemplos anteriores, reemplace "SomeComputerName" con el nombre de la computadora desde la que desea desinstalar.

También puede hacer que el script le solicite un nombre de computadora si lo prefiere con la siguiente línea:

$computerName = Read-Host "Enter Computer Name"

Si tiene varias computadoras con el mismo software que desea desinstalar, también puede definir una serie de computadoras con las que trabajar y realizar desinstalaciones de muchas máquinas:

$computerNames = @("SomeComputerName1", "SomeComputerName2", "SomeComputerName3")
$appName = "AppName"
$yourAccount = Get-Credential
ForEach ($computerName in $computerNames) {
    Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
        Get-WmiObject Win32_product | Where {$_.name -eq $appName} | ForEach {
            $_.Uninstall()
        }
    }
}

Respuesta2

Si crea un archivo llamado "servers.txt" y coloca su lista de servidores en él, también puede hacer referencia a $computerNames de la siguiente manera:

$computerNames = Get-Content "C:\some-directory\servers.txt"
$appName = "AppName"
$yourAccount = Get-Credential
ForEach ($computerName in $computerNames) {
    Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
        Get-WmiObject Win32_product | Where {$_.name -eq $appName} | ForEach {
            $_.Uninstall()
        }
    }
}

He utilizado este enfoque muchas veces en entornos de producción y parece funcionar para mí. Pruebe siempre esto en un entorno que no sea de producción antes de completarlo en un entorno de producción.

información relacionada