Question Optimisation et gestion des erreurs.

Plus d'informations
il y a 13 ans 1 jour #14413 par JONDON Cyril
On peut encore remercier Laurent il est en effet tout à fait possible de lancer une session powershell 32 bits à distance.

[code:1]

Invoke-Command {Ma Mes commandes} -Comp MonMesPCS -ConfigurationName Microsoft.Powershell32

[/code:1]

La condition étant que la ou les cible(s) est bien la configuration de session Microsoft.Powershell32 définie.

Dans un session Shell 32 Bits sur des psotes 64 Bitston script n'aurait pas besoin d'être revu pour la clé de registre.

Après c'est une question de timing, qu'est ce qui est le plus rapide en terme de mise en oeuvre : modifier ton script pour qu'il s'adapte à la cible 32 bits ou 64 bits ou mettre en place l'accès au shell 32 bits sur tes postes ce n'est pas le cas.

Pour ça c'est toi qui est le mieux placé pour trancher.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 jour #14415 par Dwelatha
Hello,

Merci pour vous retours.
En fait, j'aimerai bien partir sur la solution des jobs asynchrones mais j'ai du mal à me lancer.
Je n'ai pas bien saisis la mécanique :pinch:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 jour #14416 par Laurent Dardenne
Dwelatha écrit:

Je n'ai pas bien saisis la mécanique :pinch:

Un autre exemple sans la gestion des event de changement d'état d'un job.
Utilise des job locaux et un random pour générer des erreur ou des données aléatoires dans un ensemble.

Première étape : ta fonction doit renvoyer des objets et ne pas être couplée à XL.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 1 jour #14417 par Dwelatha
Merci, je vais regarder tout ça tranquillement à la maison.

Bonne soirée, bon weekend.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 11 mois #14420 par Dwelatha
Hello,

Laurent Dardenne écrit:

Première étape : ta fonction doit renvoyer des objets et ne pas être couplée à XL.


Concernant la première étape, la fonction doit ressembler quelque chose dans ce type ? ou je suis aux antipodes ? :)
[code:1]Function GetRegInfo
{
Param ([string]$strComputer, $key, $value)
$ErrorActionPreference = \"SilentlyContinue\"
$root = \"LocalMachine\"
$rootkey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($root, $strComputer)
$key = $rootkey.OpenSubKey($key)
$key.GetValue($value)
}

$KeyPath = \"SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
$Product = \"ProductName\"
$Productver = \"CSDVersion\"
$ProductID = \"ProductId\"
[/code:1]

Quand j'effectue depuis ma console Powershell la commande suivante:
[code:1]PS C:\Windows> GetRegInfo -cn $_ -key $KeyPath -value $Productver[/code:1]
je vois bien en sortie: [code:1]Service Pack 1[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 11 mois #14421 par Laurent Dardenne
Dwelatha écrit:

Concernant la première étape, la fonction doit ressembler quelque chose dans ce type ?

Oui.
Plus précisément si ta fonction renvoie + infos un appel au cmdlet New-Object est préférable :
[code:1]
Function Get-RegistryInformation {
# HKLM\SOFTWARE\McAfee\DesktopProtection
$key=\"SOFTWARE\McAfee\DesktopProtection\"
$regKey = $regKey.OpenSubKey($key)

$Product = $regKey.GetValue(\"Product\"«»);
$productver = $regKey.GetValue(\"szProductVer\"«»)

$key1=\"SOFTWARE\McAfee\Vscore\On Access Scanner\McShield\"
$regKey = $regKey.OpenSubKey($key1)

#?? traitement manquant ?

$key2=\"SOFTWARE\McAfee\AVEngine\"
$regKey = $regKey.OpenSubKey($key2)

# HKLM\Software\McAfee\Vscore\On Acess Scanner\McShield (Pour les versions antérieures à VSE 8.8)
$ScanEngine = $regKey.GetValue(\"EngineVersionMajor\"«»)

# HKLM\Software\McAfee\AVEngine (pour les versions VSE 8.8)
$ScanEngine = $regKey.GetValue(\"EngineVersionMajor\"«»)

# HKLM\Software\McAfee\Vscore\On Acess Scanner\McShield (pour les versions antérieures à VSE 8.8)
$VirDefVer = $regKey.GetValue(\"AVDatVersion\"«»)

# HKLM\Software\McAfee\AVEngine (pour les versions VSE 8.8)
$VirDefVer = $regKey.GetValue(\"AVDatVersion\"«»)

$key2=\"SOFTWARE\Network Associates\ePolicy Orchestrator\Agent\"
$regkey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, $strComputer)
$regKey = $regKey.OpenSubKey($key2)

# HKLM\Software\Network Associates\ePolicy Orchestrator\Agent / # Split du fqdn server
$ServerList = $regKey.GetValue(\"ePOServerList\"«») -split {$_ -eq \".\" -or $_ -eq \"|\"}
# HKLM\Software\Network Associates\ePolicy Orchestrator\Agent
$AgentGUID = $regKey.GetValue(\"AgentGUID\"«»)

$key3=\"SOFTWARE\Network Associates\ePolicy Orchestrator\Application Plugins\CMNUPD__3000\"
$regKey = $regKey.OpenSubKey($key3)

# HKLM\SOFTWARE\Network Associates\ePolicy Orchestrator\Application Plugins\CMNUPD__3000
$AgentVersion = $regKey.GetValue(\"Version\"«»)

New-Object PSObject -property @{
Product = $Product;
productver = $szProductVer;
ScanEngine = ScanEngine;
VirDefVer=$VirDefVer;
AgentGUID =$AgentGUID;
AgentVersion = $AgentVersion;
Computer=$env:ComputerName
}

}#Function Get-RegistryInformation
$MyInfos= Get-RegistryInformation
$MyInfos
[/code:1]
Voilà le principe, ensuite il reste à contrôler ton code, il contient peut être qq erreurs. Et comme ici on le conçoit 'localement' on peut utiliser directement le provider de registry.

Ton objet porte le nom du serveur interrogé, ensuite c'est le job qui exécutera ta fonction sur chacun des serveurs. Et c'est ta mécanique qui récupérera les données des jobs ET ensuite tu pourras les formater dans XL ou ACcess ou autre choses.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.059 secondes
Propulsé par Kunena