需要在powershell脚本中保留前导零

需要在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

我有一个脚本,试图使用powershell脚本将AWS凭据放入远程服务器

我面临的问题: AWS AccountID(powershell脚本参数之一)的前导零未被保留。 我不熟悉PS脚本。需要关于保留accountID的零的指导

例如-- AccountID--000009876543-此处前导零不会被保留,并且在服务器中创建一个不带零的条目。但是,900000876543已成功移交

脚本-

$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