Ne peut pas se lier argument de paramètre InputObject " parce que c'est nul
J'ai un script powershell qui mesure le temps de téléchargement sur certaines pages, mais j'ai l'erreur ci-dessus, je suis sûr que je fais de mal
erreur est
Ne peut pas lier argument de paramètre InputObject " parce que c'est nul.
function ResponseTime($CommonName,$URL, $environment)
{
$Times = 5
$i = 0
$TotalResponseTime = 0
Write-HOst $URL
While ($i -lt $Times) {
$Request = New-Object System.Net.WebClient
$Request.UseDefaultCredentials = $true
$Start = Get-Date
Write-HOst $URL
$PageRequest = $Request.DownloadString($URL)
$TimeTaken = ((Get-Date) - $Start).TotalMilliseconds
$Request.Dispose()
$i ++
$TotalResponseTime += $TimeTaken
}
$AverageResponseTime = $TotalResponseTime / $i
Write-Host Request to $CommonName took $AverageResponseTime ms in average -ForegroundColor Green
$details = @{
Date = get-date
AverageResponseTime = $AverageResponseTime
ResponseTime = $Destination
Environment = $environment
}
$results += New-Object PSObject -Property $details
$random = Get-Random -minimum 1 -maximum 30
Start-Sleep -s $random
}
#PRODUCTION
ResponseTime -commonname 'app homepage' -URL 'https://url1' -environment 'PRODUCTION'
ResponseTime -commonname 'department homepage' -URL 'https://url2' -environment 'PRODUCTION'
$results | export-csv -Path c:\so.csv -NoTypeInformation
- Sur quelle ligne vous obtenez le message d'erreur? Qu'avez-vous essayez de déboguer votre code?
- Avez-vous des guillemets autour du message après
Write-Host
? c'est à direWrite-Host "Request to $CommonName took $AverageResponseTime ms in average" -ForegroundColor Green
- dans la dernière ligne que je viens d'ajouter à la question d'origine, je n'ai pas compris désolé.
- ps. Pour info il est généralement recommandé d'éviter de
Write-Host
pour la plupart des scénarios; voir ce post pour plus d': stackoverflow.com/questions/38523369/... - Ouais, donc
$results
est vide. Il devrait être une liste d'objet de type vous permet d'ajouter vos articles. - NB: les Résultats est définie au sein de votre fonction; mais vous faites référence à l'extérieur de votre fonction; c'est à dire que vous êtes à la recherche à un autre (non défini/null) variable.
- L' (écrire) la portée de la
$results
variable est à l'intérieur de votre fonction. Vous aurez besoin de donner$results
une portée globale:$global:results
(notez également que lorsque vous utilisez l'opérateur d'affectation d'addition (+=
) la première instance va être$Null
) ou mieux le retour de la$results
de votre fonction et de l'attribuer à un mondial$results
:$Results = ResponseTime -commonname 'app homepage' ...
$Résultats += ResponseTime -commonname 'département de la page d'accueil de'...` - Est la dernière ligne qui a été ajouté à votre modifier vraiment la dernière ligne de votre code ou tout simplement placé là pour des fins pédagogiques?
Vous devez vous connecter pour publier un commentaire.
@Clijsters a donné la bonne réponse; c'est à dire la question de la portée de votre
$results
variable.Cette réponse fournit simplement un peu de l'examen du code pour vous aider avec les autres bits d'aller vers l'avant...
Get-Item
). Qu'est-ce que la convention de nommage pour Powershell fonctions supérieures/inférieures cas d'utilisation?Cmdlets
" (Fonctions Avancées) au lieu de (de Base)Functions
; ils sont fondamentalement la même chose, seulement taggés avec[Cmdletbinding()]
. La raison de cela, vous obtenez de l'aide pour des fonctionnalités telles que la sortie détaillée. http://www.lazywinadmin.com/2015/03/standard-and-advanced-powershell.htmlmeasure-command
; mais aucune sortie serait supprimé consommée par lemeasure-command
fonction). Le Timing d'une commande de l'exécution de PowerShellWrite-Output
(ou vous pouvez laisser de côté le nom de la fonction; toute la production causée par la passation d'une variable avec rien de processus, il sera nourri à la conduite; c'est à direwrite-object $a
est la même qu'une ligne exclusivement composée de$a
).De l'examen de votre dernière édition, il semble que
$results
retourne simplement$null
(en tant Que votre erreur dit)Le seul paramètre de ligne
$results
est$results += New-Object PSObject -Property $details
Il n'est pas dans la portée de votre
Export-CSV
appel et que, même s'il serait, $résultats pourraient être vide, si cette ligne n'est pas appelé.Vous devrait à mon humble avis, de définir, par exemple, un ArrayList comme suit:
Et l'ajout d'éléments via
Cela vous donne une liste de tableaux - même si il n'y a pas d'éléments qui peuvent être facilement transformé en CSV et autres formats.