Powershell ile prog...
 
Bildirimler
Hepsini Temizle

Powershell ile program sildirme  

  RSS
Semih Bulam
(@SemihBulam)
Üye

Selamlar arkadaşlar,

Powershell üzerinde oluşturacağım script ile programları silmeye çalışacağım, silme işleminde de MsiExec.exe /x '{asdfggsdf-a1111-sdgdag-1123-dfg}' /passive kod yardımı ile Regedit kayıtları içerisinde bulunan UninistallString kullanıyor olacağım ancak silme işlemini yapamıyorum.

Powershell de $array adında bir array değişken oluşturuyorum ve

$array=@(Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object {$_.Name -match "****"} | Select-Object version)

kod yardımı ile $array değişkenine ** adıyla eşleşen programların versiyon listesini yazdırıyorum.Ancak işler bu kısımdan sonra karışıyor atmış olduğum array içersinden kontrol sağlayarak teker teker programları sildirmem lazım. Sırayla silinmeleri gerek. for dögüsüne sokarak, if ile tek tek kontrol ettiğimde,

 

örnek olarak : 
for($i=0; $i -le $array.Count; $i++)
{
if($array[$i] = '6000')
{
MsiExec.exe /x '{asdfggsdf-a1111-sdgdag-1123-dfg}' /passive
}
if($array[$i] = '2000')
{
MsiExec.exe /x '{asdfggsdf-a1111-sdqwrrgg-1123-dfg}' /passive
}
}

yukarıdaki script'i çalıştırıyorum ve bütün UninstallStringler aynı anda çalışmaya başlıyorlar ve bundan dolayı çakışma oluyor ve programlar silinmiyor. Sadece ilk başlayan .msi paketindeki program siliniyor.

Switch kullanarak denedim ama onda da $array da olan değerleri kontrol ettiremedim ve silemedim.

Örnek olarak : 
$array = @(Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object {$_.Name -match "****"} | Select-Object version)
switch ($array)
{
"6000" { MsiExec.exe /x '{asdfggsdf-a1111-sdgdag-1123-dfg}' /passive }
}

Switchde'de denediğim kod yukarıdaki gibidir.

Sizce bu arrayın içersindeki değerleri Switch ya da farklı bir kontrol mekanızması ile sırasıyla nasıl kontrol ettiririm ve yine aynı sırayla tek tek nasıl çalıştırabilirim.

Konu hakkında yardımlarınız için şimdiden çok teşekkür ederim

Alıntı
Gönderildi : 29/03/2017 19:26
Yusuf Ozturk
(@yusufozturk)
Üye

Merhaba,

Probleminizin switch ya da if kontrolüyle ilgili bir ilgisi bulunmuyor. MsiExec yapısı gereği çalıştırıldığı an return eder kendisini.

Bunu önlemek için MsiExec'i Start-Process ile çalıştırarak, bitmesini bekleyebilirsiniz.

Start-Process C:\Windows\System32\msiexec.exe -ArgumentList "/uninstall {asdfggsdf-a1111-sdgdag-1123-dfg}" -wait

Sondaki -wait parametresi, uninstall bitene kadar beklemesini sağlayacaktır scriptin. İlk for döngüsü içinde kullanabilirsiniz bunu.

İyi çalışmalar.

CevapAlıntı
Gönderildi : 31/03/2017 13:49
Paylaş: