PowerShell function $input parameters
parameters, powershell
Solution
Careful, `$input` is an automatic variable used by PowerShell to allow iteration over data passed into a function. Try this instead:
function clean_data($data) {
Write-Verbose "Received data: $data"
Write-Verbose "Cleaning data"
$output = @()
foreach ($line in $data) {
Write-Verbose "Processing line: $line"
if ($line -match 'running') {
$output += $line
}
}
$output
}
Problem
First, I'm just learning PowerShell, but I have programmed in many scripting languages. I'm writing a script to retrieve output from a command on a remote server and then check that output for the word "running". Right now it retrieves the output of the command, and I have it in my variable, `$data`. The problem is I'm putting it through my "clean_data" function, and it's not the same contents in the variables that I'm passing to the function. What I'm wondering is how on Earth does the output of the `$data` variable have one content when printed to screen, but when passed to a function and immediately printed have a new content? What am I missing? I just want to loop through the lines that were returned to see how many have "running" in them and print a nice error if there isn't. CODE (Partial: function and relevant code) ``` function clean_data($input) { Write-Output "Received data"$input Write-Output "Cleaning data" $output=@() foreach ($line in $input) { Write-Output "Looking at: "$line.ToString() if ($line.ToString().Contains("running")) { $output+=$line } } Write-Output $output return ,$output } $data = Get-Job -id $jobid.id | Receive-Job Write-output "Data Type: "$data.GetType().Fullname Write-Output "Output of $cmd" Write-Output "============================================================" Write-Output $data Write-Output "============================================================" clean_data $data Write-Output $newdata Remove-Job -Id $jobid.Id ``` OUTPUT ``` Data Type: System.Object[] Output of C:\opcragt.bat servername ============================================================ C:\Windows\system32>"D:\Program Files\HP\HP BTO Software\bin\win64\opcragt.cmd" servername Node: servername HPOM Managed Node status: ------------------------- OV Performance Core coda (3500) is running OV Communication Broker ovbbccb (10988) is running OV Control ovcd (10400) is running OV Config and Deploy ovconfd (5092) is running Subagent EA: Action Agent opcacta (9716) is running Monitor Agent opcmona (9872) is running Message Agent opcmsga (14712) is running Message Interceptor opcmsgi (13512) is running WMI Interceptor opcwbemi (6608) is running ************************************************** Remote administration completed successfully on all nodes. ============================================================ Received data Current ------- Cleaning data ```