需要在powershell脚本中保留前导零
我有一个脚本,试图使用powershell脚本将AWS凭据放入远程服务器 我面临的问题: AWS AccountID(powershell脚本参数之一)的前导零未被保留。 我不熟悉PS脚本。需要关于保留accountID的零的指导 例如-- AccountID--000009876543-此处前导零不会被保留,并且在服务器中创建一个不带零的条目。但是,900000876543已成功移交 脚本-需要在powershell脚本中保留前导零,powershell,url,arguments,azure-powershell,leading-zero,Powershell,Url,Arguments,Azure Powershell,Leading Zero,我有一个脚本,试图使用powershell脚本将AWS凭据放入远程服务器 我面临的问题: AWS AccountID(powershell脚本参数之一)的前导零未被保留。 我不熟悉PS脚本。需要关于保留accountID的零的指导 例如-- AccountID--000009876543-此处前导零不会被保留,并且在服务器中创建一个不带零的条目。但是,900000876543已成功移交 脚本- $user = $args[7] #userid $pass = $args[8] #pas
$user = $args[7] #userid
$pass = $args[8] #password
$pair = "$($user):$($pass)" #pair
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
$basicAuthValue = "Basic $base64"
$headers = @{ Authorization = $basicAuthValue }
$c1=$args[0]
$path=$args[1]
$cert=$args[2]
$p1=$args[3]
$awsacct=$args[4] #account_id
$awsak=$args[5] #access_key
$awssk=$args[6] #secret_key
$body9="{`"project`": { `"href`": `"/tenants/$c1/projects/$p1`"},`"account`": {`"href`": `"/tenants/$c1/accounts/$awsacct`"},`"credential`":{ `"type`": `"key`",`"accessKey`": `""+$awsak+"`", `"secretKey`": `""+$awssk+"`"}}"
$r=Invoke-WebRequest -uri "$path/tenants/$c1/credentials/$awsak" -Headers $headers -Certificate $cert -ContentType application/json -Method PUT -Body $body9
$r.Content
请提供字符串值,例如
“000009876543”
(“000009876543”
)而不是数值000009876543
,或者将提供的值转换为字符串,请参阅以下自我解释的代码段:
if ( $args.Count -lt 1 ) {
Write-Verbose 'Supply at least one parameter' -Verbose
exit
}
Remove-Variable val_* -ErrorAction SilentlyContinue
$val_a = $args[0] # unchanged
$val_b = [string]$args[0] # dynamically typed variable
[string]$val_c = $args[0] # strongly typed variable
$val_d = $args[0] -as [string] # convert the input object, see about_Type_Operators
$val_e = "$($args[0])" # wrong: removes leading zeroes
Get-Variable val_* |
Select-Object -Property Name,
Value,
@{ L='type'; E={ $_.Value.GetType().Name } },
@{ L='test'; E={ $_.Value * 2 } }
输出:
PS D:\PShell> D:\PShell\SO\59486037.ps1 '000123'
Name Value type test
---- ----- ---- ----
val_a 000123 String 000123000123
val_b 000123 String 000123000123
val_c 000123 String 000123000123
val_d 000123 String 000123000123
val_e 000123 String 000123000123
PS D:\PShell> D:\PShell\SO\59486037.ps1 000123
Name Value type test
---- ----- ---- ----
val_a 000123 Int32 246
val_b 000123 String 000123000123
val_c 000123 String 000123000123
val_d 000123 String 000123000123
val_e 123 String 123123
如前所述,如果无法使用Orchestrator作为字符串发送参数,则始终可以在代码中操纵整数值。 在您的情况下,
account\u id
值作为$args[4]
发送到脚本,并在这个过程中将其转换为整数,删除任何填充前导零
因为在您的组织中,您使用这些id作为12位数字,所以您可以使用String.PadLeft方法重新创建:
$awsacct = $args[4].ToString().PadLeft(12,"0")
或者使用-f
格式运算符:
$awsacct = '{0:000000000000}' -f $args[4]
简言之:
$awsacct = '{0:d12}' -f $args[4]
使用上述任何一项都会导致
不要使用自动变量
$args
,而是定义命名参数并将$awsacct
定义为字符串:Param($c1,$path,$cert,$p1,[string]$awsacct,$awsak,$awssk)
@iRon我在远程服务器上运行此脚本,我们有嵌入式PS,因此无法定义命名参数。我们拥有参数及其值,并将其传递给powershell嵌入式脚本。我们如何定义$ AWSACTC作为上述脚本中的字符串?我不明白为什么不能使用<代码> PARAM < /代码>,请参见:将代码提供的值如下:<代码> $用户= [字符串] $ARGS [ 7 ] <代码>或$>用户=“$($ARGS(7))”<代码>或$>用户=$ARGS(7)-[String ]。…然后告诉我们如何使用orchestrator调用此脚本(尤其是参数)。现在,AccountID被视为一个数值,您需要将其作为字符串发送。另一种方法是在代码中用零填充值,如$awsacct=“$args[4]”。PadLeft(12,“0”)
或$awsacct='{0:000000000000}'-f$args[4]
在本地PS中测试了上述内容,但似乎不起作用脚本--$args=1,3,400987654321$args[3]$aa=“$args[3]”。PadLeft(12,“0”)$aa输出--987654321 1 3 4 987654321[3]*/@Sneha,您不应该将$args
用作用户定义变量,因为这是一个变量。我已将答案更新为使用$awsacct=$args[4].ToString().PadLeft(12,“0”)
。就我个人而言,我最喜欢第三个例子。
9876543 --> 000009876543
900000876543 --> 900000876543