如何在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
相关产品推荐
相关产品推荐

