Hey guys, I am new here and wanted to provide this script for anyone else who might be in my position but I didnt know where to post it. Hope you guys will be kind enough to move the post instead of yelling at me for posting it in the wrong section. Situation i was in is that at I deployed the newest version of K1000 and deployed agents via GPO. Shortly after i found out that about half the machines had old version of the agent deployed and it prevented new one from being installed. Old agent didn't want to report to the new appliance even tho the name/ip was the same. After looking through a few posts i found some scripts to remove the old agent but neither one of them would be any kind of selective so I wrote my own and wanted to share to help others out.
While I am running this script in two parts It can be combined into a single script, I just wanted control and to review the list of machines it'll hit before it starts uninstalling anything. I am not a powershell guru so I am sure i mad emistakes and feedback is welcomed.
fFirst part of the script is to find all machines that have old agent, since I was going from 6.x (pre-quest) it was done easily by searching through AD and checking service names and dumping machine names into a txt file.
Get-ADComputer -Properties * -Filter * -SearchBase "********" | foreach { if (Get-Service -ComputerName $_.name -DisplayName "dell kace*") {echo $_.name}} >> Feed-list.txt
this piece could easily be caught into a variable instead and used in for each loop instead of feeding foreach loop from a text file. But like i said, i wanted to review the list first. Similar check could be done by reading c:\programdata\amp.conf for agent version but as this was easier in my case i went with path of least resistance.
This is the actual install piece of the script. It'll check OS architecture and execute on proper path.
$list = Get-Content .\Feed-list.txt
foreach ($item in $list) {
Remove-Variable amprem32
Remove-Variable amprem64
Remove-Variable checktemp
Remove-Variable arch
$arch = (Get-WmiObject Win32_OperatingSystem -ComputerName $item ).OSArchitecture
$amprem64 = test-path "\\$item\c$\temp\amremove64.cmd"
$amprem32 = test-path "\\$item\c$\temp\amremove32.cmd"
$checktemp = test-path "\\$item\c$\temp"
if ($arch -eq "64-bit") {
if (-not $checktemp) {mkdir \\$item\c$\temp
Copy-Item .\amremove64.cmd \\$item\c$\temp} else { if (-not $amprem64) {Copy-Item .\amremove64.cmd \\$item\c$\temp}}
write-host running 64-bit
.\PsExec.exe \\$item -h -accepteula cmd /c c:\temp\amremove64.cmd
Remove-Item \\$item\c$\temp\amremove64.cmd
}
else {
if (-not $checktemp) {mkdir \\$item\c$\temp
Copy-Item .\amremove32.cmd \\$item\c$\temp} else { if (-not $amprem32) {Copy-Item .\amremove32.cmd \\$item\c$\temp}}
write-host running 32-bit
.\PsExec.exe \\$item -h -accepteula cmd /c c:\temp\amremove32.cmd
Remove-Item \\$item\c$\temp\amremove32.cmd
}
}
Two CMD's it copies are the basic Kace CMD's
cd "C:\Program Files (x86)\dell\kace" - change path for 32bit CMD
AMPTools.exe uninstall all
to search amp.conf file for file version instead of get-service name use select-string in foreach with desired pattern. It'll look something like this
Get-ADComputer -Properties * -Filter * -SearchBase "********" | foreach { if (select-string -Path \\$_.name\C$\ProgramData\dell\KACE\amp.conf -pattern "serverversion=6") {echo $_.name}} >> Feed-list.txt
Comments