Eld*_*dar 0 variables powershell
我正在创建一个 powershell 脚本,通过 API 请求将用户添加到系统中。
我在下面定义了一个变量,它有很多转义字符,因为它是一个进入请求正文的 json 字符串,否则不可能将用户数据定义为其中的变量,但这种方式有效。
$BODY_USERS = "{`"firstName`":`"${NAME}`", `"lastName`":`"${LASTNAME}`",`"email`":`"${EMAIL}`",`"enabled`":`"true`", `"username`":`"${USERNAME}`",`"credentials`":[{`"type`":`"password`",`"value`":`"Test12345789#`",`"temporary`":true}]}"
我执行添加用户的命令是这样的:
Invoke-RestMethod -Uri $URI_USERS -Method Post -Headers $HEADERS_USERS -Body $BODY_USERS
我想($NAME, $LASTNAME etc)在单独的文件中提供与用户相关的变量。我使用dotsource为一位用户做了这件事——基本上只是在一个单独的 .ps1 文件中定义了上述变量,并在脚本中引用它. .\vars.ps1,对于一位用户,它当然工作得很好。
但是,如果我需要为多个用户构建一个 for 循环,我不确定在这种情况下最好的方法是什么。
我应该在我的单独vars.ps1文件中定义这样的:
$var=@($NAME='Jonny'; $LASTNAME='Doe'; $USERNAME='johnnydoe'; $EMAIL='johnny.doe@email.com')
$var@($NAME='Jonny2'; $LASTNAME='Doe2'; $USERNAME='johnnydoe2'; $EMAIL='johnny.doe2@email.com')
然后Get-Content "C:\Users\Desktop\vars.ps1" | ForEach-Object {do blahblah}在我的脚本中使用类似的东西?但我不确定我的$BODY_USERS变量将如何消耗它。所以我需要为一个变量提供一个变量数组,或者类似的东西......
作为PowerShell的新手,我在这里有点困惑。
任何建议表示赞赏!
如评论中所述,您无需手动构建 JSON 字符串。创建一个hashtable更简洁的语法并使用ConvertTo-JSON. 这还负责转义在 JSON 中具有特殊含义的字符,例如"和\。
$BODY_USERS = @{
firstName = $NAME
lastName = $LASTNAME
email = $EMAIL
enabled = $true
username = $USERNAME
credentials = @(
@{ type = "password"; value = "Test12345789#"; temporary = $true }
)
}
$BODY_USERS_JSON = ConvertTo-JSON $BODY_USERS
Invoke-RestMethod -Uri $URI_USERS -Method Post -Headers $HEADERS_USERS -Body $BODY_USERS_JSON
Run Code Online (Sandbox Code Playgroud)
对于多个用户,您可以将数据存储在 CSV 文件中,使用 PowerShell 很容易处理:
用户.csv
$BODY_USERS = @{
firstName = $NAME
lastName = $LASTNAME
email = $EMAIL
enabled = $true
username = $USERNAME
credentials = @(
@{ type = "password"; value = "Test12345789#"; temporary = $true }
)
}
$BODY_USERS_JSON = ConvertTo-JSON $BODY_USERS
Invoke-RestMethod -Uri $URI_USERS -Method Post -Headers $HEADERS_USERS -Body $BODY_USERS_JSON
Run Code Online (Sandbox Code Playgroud)
现在我们可以像这样处理users.csv:
$allUsers = Import-Csv users.csv
$allUsers # List users only for debugging purposes
foreach( $user in $allUsers ) {
$BODY_USERS = @{
firstName = $user.NAME
lastName = $user.LASTNAME
email = $user.EMAIL
enabled = $true
username = $user.USERNAME
credentials = @(
@{ type = "password"; value = "Test12345789#"; temporary = $true }
)
}
$BODY_USERS_JSON = ConvertTo-JSON $BODY_USERS
Invoke-RestMethod -Uri $URI_USERS -Method Post -Headers $HEADERS_USERS -Body $BODY_USERS_JSON
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |