首页 > 解决方案 > Powershell 从工作代码中生成函数

问题描述

需要您的建议,如何将脚本的一部分重新排列成函数以在脚本中调用它,以组装新的凭据。

这是一个脚本:

$vault="3.3.3.3:8500"   
#  Check Vault login for Tech profile
#  Input Login & password
$pair = (Get-Credential)
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$Headers = @{Authorization = $basicAuthValue}
$rawcontent=(Invoke-WebRequest -Uri $vault -Headers $Headers).StatusCode

谁能给我一个例子,如何将这部分代码组装成函数,在输入错误凭据的情况下将其调用到 if/elseif 部分?

if ( $rawcontent -contains '200' ) { Write-Host "Technician is authenticated!" }
[ elseif ( $rawcontent -contains '400' ) {Write-Host "Bad credentials!" | # call Ask-Creds function to re-enter creds } ]
[ elseif ( $rawcontent -contains '000' ) {Write-Host "Connection failed!" | Exit 1 } ]

UPD1 - 上面的代码正在运行。我尝试根据上面的代码组装一些函数,但它没有向 $rawcontent 变量返回任何值。谁能给我一个提示,我做错了什么:

function Ask-Creds {
    param(
        $Credential = (Get-credential -message 'Please enter  Technician`s login & password for Terminal registration:')        
    )
    $vault="3.3.3.3:8500" 
    $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Credential))
    $basicAuthValue = "Basic $encodedCreds" 
    $Headers = @{Authorization = $basicAuthValue}
    $rawcontent=(Invoke-WebRequest -Uri $vault -Headers $Headers).StatusCode
}

Ask-Creds

echo $rawcontent #returns nothing

标签: functionpowershell

解决方案


根据@boxdog 的回答,我能够组装更正的函数:

function Ask-Creds {
    param(
        [ValidateNotNull()]
        $Credential = (Get-credential -message 'Please enter  Technician`s login & password for Terminal registration:')        
    )
    $vault="3.3.3.3:8500" 
    $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Credential))   
    $basicAuthValue = "Basic $encodedCreds" 
    $Headers = @{Authorization = $basicAuthValue}
    $rawcontent=(Invoke-WebRequest -Uri $vault -Headers $Headers).StatusCode
    echo "$rawcontent"
}

Ask-Creds

推荐阅读