2017-05-18 5 views
0

J'ai téléchargé le script PowerShell à partir du lien ci-dessous.Compteurs de performance PowerShell Remoting Remise à zéro

https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Perfmon-0f013da8

Je suis en mesure d'exécuter ce script avec succès sur la machine locale, mais face à problème sur la machine distante. J'ai mis à jour ci-dessous le code

(Get-Counter -ComputerName $ComputerName -Counter (Convert-HString -HString $Counter) -SampleInterval 2 -MaxSamples 10).counterSamples 

à suivre.

(Invoke-Command -ComputerName $ComputerName -ScriptBlock {Get-Counter -Counter (Convert-HString -HString $Counter) -SampleInterval 2 -MaxSamples 10}).counterSamples 

Maintenant, je reçois ci-dessous erreur.

The term 'Convert-HString' is not recognized as the name of a cmdlet, function, script file, or operable program. 

Répondre

1

La fonction n'existe pas sur l'ordinateur distant que vous essayez de le lancer. Vous devez coller la fonction complète de votre scriptblock avant d'appeler si elle a elle chargée lorsqu'il tente de l'exécuter . Avec Invoke-Command/tout ce qui implique une session PSSession sur une autre machine, vous exécutez dans le contexte de cette machine. Si vous chargez une fonction/un module/une variable sur votre machine locale, elle n'existe que sur votre machine locale.

Edit: Mise à jour pour permettre $Counter à régler sur la machine locale, puis passé dans le -ScriptBlock en utilisant l » Invoke-Command-ArgumentList param et paramétrer le scriptblock

Exemple:

(Invoke-Command -ComputerName $ComputerName -ScriptBlock { 
    Param 
    (
    [parameter(Mandatory=$false,Position=0)] 
    [String] 
    $Counter 
    ) 
    function Global:Convert-HString {  
     [CmdletBinding()]    
     Param    
     (
      [Parameter(Mandatory = $false, 
       ValueFromPipeline = $true, 
       ValueFromPipelineByPropertyName = $true)] 
      [String]$HString 
     )#End Param 

     Begin { 
      Write-Verbose "Converting Here-String to Array" 
     }#Begin 
     Process { 
      $HString -split "`n" | ForEach-Object { 

       $ComputerName = $_.trim() 
       if ($ComputerName -notmatch "#") { 
        $ComputerName 
       }  


      } 
     }#Process 
     End { 
      # Nothing to do here. 
     }#End 

    }#Convert-HString 
    Get-Counter -Counter (Convert-HString -HString $Counter) -SampleInterval 2 -MaxSamples 10 
} -ArgumentList $Counter).counterSamples 
+0

Pouvez-vous s'il vous plaît fournir Exemple. –

+0

téléchargé le script à partir du lien, copié la fonction de celui que vous essayez d'appeler et collé dans votre bloc de script avant que votre scriptblock essaie de l'appeler –

+0

Je reçois erreur ci-dessous en utilisant le code ci-dessus. Un argument requis est manquant ou incorrect. + CategoryInfo: InvalidResult: (:) [Get-Counter], exception + FullyQualifiedErrorId: CounterApiError, Microsoft.PowerShell.Commands.GetCounterCommand + PSComputerName: server1 –