Utilisez :
function remove-HSsoftware{
[cmdletbinding()]
param(
[parameter(Mandatory=$true,
ValuefromPipeline = $true,
HelpMessage="IdentifyingNumber can be retrieved with `"get-wmiobject -class win32_product`"")]
[ValidatePattern('{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}}')]
[string[]]$ids,
[parameter(Mandatory=$false,
ValuefromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage="Computer name or IP adress to query via WMI")]
[Alias('hostname,CN,computername')]
[string[]]$computers
)
begin {}
process{
if($computers -eq $null){
$computers = Get-ADComputer -Filter * | Select dnshostname |%{$_.dnshostname}
}
foreach($computer in $computers){
foreach($id in $ids){
write-host "Trying to uninstall sofware with ID ", "$id", "from computer ", "$computer"
$app = Get-WmiObject -class Win32_Product -Computername "$computer" -Filter "IdentifyingNumber = '$id'"
$app | Remove-WmiObject
}
}
}
end{}}
remove-hssoftware -ids "{8C299CF3-E529-414E-AKD8-68C23BA4CBE8}","{5A9C53A5-FF48-497D-AB86-1F6418B569B9}","{62092246-CFA2-4452-BEDB-62AC4BCE6C26}"
Il n'a pas été entièrement testé, mais il a fonctionné sous PowerShell 4.
J'ai exécuté le fichier PS1 tel qu'il est présenté ici. Je l'ai laissé récupérer tous les systèmes de la base de données de l'entreprise. AD et j'essaie de désinstaller plusieurs applications sur tous les systèmes.
J'ai utilisé l'IdentifyingNumber pour rechercher la cause logicielle de l'entrée de David Stetlers.
Non testé :
- Ne pas ajouter les ids à l'appel de la fonction dans le script, au lieu de commencer le script avec les IDs des paramètres.
- Appeler le script avec plus d'un nom d'ordinateur pas automatiquement récupéré à partir de la fonction
- Récupération des données du tuyau
- Utilisation des adresses IP pour se connecter au système
Ce qu'il ne fait pas :
- Il ne donne aucune information si le logiciel a effectivement été trouvé sur un système donné.
- Il ne donne aucune information sur l'échec ou le succès de la désinstallation.
Je n'ai pas pu utiliser uninstall(). En essayant cela, j'ai obtenu une erreur me disant que l'appel d'une méthode pour une expression qui a une valeur de NULL n'est pas possible. À la place, j'ai utilisé Remove-WmiObject, qui semble accomplir la même chose.
ATTENTION : Si le nom de l'ordinateur n'est pas indiqué, le logiciel est supprimé de l'ordinateur. TOUTES dans l'Active Directory.