none
script pour trouver l'utilisateur d'un process / script à distance en erreur RRS feed

  • Question

  • bonjour à tous,

    j'ai créé un petit script pour récupérer le nom des utilisateurs d'un process.

    En local, le script fonctionne sans erreur.

    $owners = @{}Get-WmiObject win32_process |% {$owners[$_.handle] = $_.getowner().user}

    get-process | select processname,@{l="Owner";e={$owners[$_.id.tostring()]}} |WHERE {$_.processname -eq 'notepad'}

    lorsque j'exécute ce script à distance pratiquement au même moment, j'ai cette erreur de manière aléatoire:

    Exception lors de l'appel de « GetOwner » : « Non trouvé  »
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : WMIMethodException

    j'appelle ce script à distance avec la commande ci dessous:

    $server="monserveur"

    invoke-command -computername $server {c:\rep\listeUsers.ps1}

    l'erreur n'empêche pas le script de fonctionner...

    mardi 21 juillet 2015 07:29

Réponses

  • Salut,

    tu devrais tester la valeur de la méthode GetOwner avant d'utiliser la propriété user.

    Comme indiqué ici, il se peut que le process en cours d'interrogation n'existe plus. On peut également rencontrer ce cas avec Get-Process.


    Beatus, qui prodest, quibus potest.

    • Marqué comme réponse jeepeez vendredi 24 juillet 2015 07:17
    mardi 21 juillet 2015 10:21
    Modérateur
  • Voici le script fonctionnel.

    Merci laurent, c'était la bonne piste: vérifier si la tâche est encore existante ou juste dans le cache.

    voici le script fonctionnel:

    $servers=@("serveur1","serveur2")
    
    foreach ($server in $servers)
    {
    	invoke-command -computername $server {
    		$computer = gc env:computername
    		$procs = @()
    		$allProcs = @(Get-WmiObject win32_process)
    		write-host "--------------------------------------------------------"
    		foreach($proc in $allProcs)
    		{
    			$procActive = get-process -Id $proc.processId -ErrorAction SilentlyContinue
    			if($procActive)
    			{
    	
    				if($proc.processname -like 'nomduprocess*')
    				{	
    					"{0,-20} {1,-20} {2,8}" -f `
    					$proc.processname.ToUpper(),$proc.getowner().user.ToUpper(),$computer
    				}
    			}
    		}
    	}
    }

    • Marqué comme réponse jeepeez vendredi 24 juillet 2015 07:23
    vendredi 24 juillet 2015 07:22

Toutes les réponses

  • Salut,

    tu devrais tester la valeur de la méthode GetOwner avant d'utiliser la propriété user.

    Comme indiqué ici, il se peut que le process en cours d'interrogation n'existe plus. On peut également rencontrer ce cas avec Get-Process.


    Beatus, qui prodest, quibus potest.

    • Marqué comme réponse jeepeez vendredi 24 juillet 2015 07:17
    mardi 21 juillet 2015 10:21
    Modérateur
  • Salut,

    essaye avec ceci :

    (Get-WmiObject win32_process -ComputerName $Server | ? -Property Name -eq "notepad.exe").getowner().user

    (Qui fonctionne pour moi)

    mardi 21 juillet 2015 12:09
  • Bonjour,

    c'est normal d'avoir des erreurs, ton script doit être mis sur chaque serveur, ou bien tu dois le mettre dans

    ScriptBlock de invoke-command!!

    A+


    L’information n’a de valeur que si elle est partagée!! AK |Mon Blog|


    mardi 21 juillet 2015 18:38
  • bin en fait non :) le scriptblock peut être implicite
    vendredi 24 juillet 2015 07:16
  • Voici le script fonctionnel.

    Merci laurent, c'était la bonne piste: vérifier si la tâche est encore existante ou juste dans le cache.

    voici le script fonctionnel:

    $servers=@("serveur1","serveur2")
    
    foreach ($server in $servers)
    {
    	invoke-command -computername $server {
    		$computer = gc env:computername
    		$procs = @()
    		$allProcs = @(Get-WmiObject win32_process)
    		write-host "--------------------------------------------------------"
    		foreach($proc in $allProcs)
    		{
    			$procActive = get-process -Id $proc.processId -ErrorAction SilentlyContinue
    			if($procActive)
    			{
    	
    				if($proc.processname -like 'nomduprocess*')
    				{	
    					"{0,-20} {1,-20} {2,8}" -f `
    					$proc.processname.ToUpper(),$proc.getowner().user.ToUpper(),$computer
    				}
    			}
    		}
    	}
    }

    • Marqué comme réponse jeepeez vendredi 24 juillet 2015 07:23
    vendredi 24 juillet 2015 07:22