在Powershell中将多个参数传递给函数变量

时间:2017-04-25 18:24:28

标签: function powershell parameters parameter-passing

我有一个我无法弄清楚的问题。这是一个无法解决的语法问题。假设我有这个功能:

function putStudentCourse ($userName, $courseId)
{           
    $url = "http://myurl/learn/api/public/v1/courses/courseId:" + $courseId + "/users/userName:" + $userName

    $contentType = "application/json"       
    $basicAuth = post_token
    $headers = @{
              Authorization = $basicAuth
             }
    $body = @{
              grant_type = 'client_credentials'
             }
    $data = @{
            courseId = $courseId
            availability = @{
                available = 'Yes'
                }
            courseRoleId = 'Student'
        }
    $json = $data | ConvertTo-Json

    $putStudent = Invoke-RestMethod -Method Put -Uri $url -ContentType $contentType -Headers $headers -Body $json

    return $json
}

然后是我的主要方法:

#MAIN

$userName = "user02";
$courseId = "CourseTest101"

$output =  putStudentCourse($userName, $courseId)
Write-Output $output

现在它只是返回第一个值($ userName),但输出显示如下:

{
    "availability":  {
                         "available":  "Yes"
                     },
    "courseRoleId":  "Student",
    "courseId":  null
}

不知怎的,$ courseId永远不会被填满,我不知道为什么。我究竟做错了什么? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:6)

这是一个语法问题。定义函数时,将参数放在括号中,正如您在此处正确执行的那样:

function putStudentCourse ($userName, $courseId)

但是当你调用一个函数时,你将参数放在括号中。将您的代码更改为如下所示:

$output =  putStudentCourse $userName $courseId

powershell解释器解释原始代码

$output =  putStudentCourse($userName, $courseId)

表示"创建一个($ userName,$ courseId)列表,并将其作为putStudentCourse的第一个参数传递。"