You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell主脚本中传递令牌给多个AWS子脚本

可行的实现方法

有两种常用方案能解决这个问题,核心都是让主脚本一次性收集令牌,再传递给子脚本复用:

方案1:通过脚本参数传递(推荐,更规范安全)

这种方法需要修改子脚本,让它们接收令牌参数,主脚本收集后直接传过去:

步骤1:编写主脚本,收集令牌并调用子脚本

# Main-AWS-VM-Tool.ps1
# 收集6个令牌,这里转成明文示例,也可以保留SecureString形式
$tokens = @()
for ($i=1; $i -le 6; $i++) {
    # 用-AsSecureString避免输入时明文显示
    $secureToken = Read-Host "请输入第$i个令牌" -AsSecureString
    # 如果子脚本需要明文令牌,转成明文;若支持SecureString,直接存$secureToken即可
    $tokens += [System.Net.NetworkCredential]::new("", $secureToken).Password
}

# 调用三个子脚本,把令牌数组作为参数传递
& .\Check-VM-Status.ps1 -Tokens $tokens
& .\Start-VM.ps1 -Tokens $tokens
& .\Stop-VM.ps1 -Tokens $tokens

步骤2:修改每个子脚本,添加参数接收逻辑

在每个子脚本的开头添加参数定义,替换原来手动输入令牌的代码:

# 以Check-VM-Status.ps1为例
param(
    [Parameter(Mandatory=$true)]
    [string[]]$Tokens  # 如果是SecureString类型,就改成[SecureString[]]
)

# 原来脚本里读取令牌的代码(比如$token1 = Read-Host...)替换成从$Tokens数组取值
$token1 = $Tokens[0]
$token2 = $Tokens[1]
# ... 以此类推到$token6 = $Tokens[5]

# 后续原有的AWS操作逻辑保持不变

注意点

修改子脚本后,原来的证书签名会失效,需要用公司的签名证书重新签名,执行命令:

Set-AuthenticodeSignature -FilePath .\Check-VM-Status.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

另外两个子脚本同理执行签名操作。

方案2:通过全局变量传递(无需大量修改子脚本,但安全性稍弱)

如果不想给子脚本加参数,可以在主脚本里定义全局变量,子脚本直接读取:

主脚本代码

# Main-AWS-VM-Tool.ps1
$global:VM_Tokens = @()
for ($i=1; $i -le 6; $i++) {
    $secureToken = Read-Host "请输入第$i个令牌" -AsSecureString
    $global:VM_Tokens += [System.Net.NetworkCredential]::new("", $secureToken).Password
}

# 直接调用子脚本
& .\Check-VM-Status.ps1
& .\Start-VM.ps1
& .\Stop-VM.ps1

修改子脚本

把每个子脚本里原来手动输入令牌的代码,改成读取全局变量:

# 替换子脚本里的Read-Host代码
$token1 = $global:VM_Tokens[0]
$token2 = $global:VM_Tokens[1]
# ... 直到$token6 = $global:VM_Tokens[5]

同样,修改后需要重新给子脚本签名。

内容的提问来源于stack exchange,提问作者Tio Nacho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:33:36