Windows powershell命令,将一个命令的输出直接用作另一个命令中的参数



我想要一个命令,它可以获取pod的名称,然后使用它登录到pod。列出吊舱以获取吊舱名称的命令:

kubectl get pods | Select-String -Pattern "mypodname"

输出为:

mypodname 1/1 Running    0  4d3h

我只需要在这里得到mypodname的值。我尝试过选择对象名称,但没有成功。podname会随着时间的推移而变化。例如,它可能是mypodname-3467gogsfg一天和mypodname-043086dndn第二天因为新的部署。

这个值我将在这个命令中使用:

kubectl --server=https://myservername.com --insecure-skip-tls-verify exec -it <name of pod goes here> /bin/sh

第二个问题是如何在windows powershell脚本中组合这两者,以便我可以运行这样的程序来登录吊舱:

podlogin mypodname

函数可能就是您想要的,因为您希望通过只传递名称将结果组合到执行中:

Function PodLogin ($PodName) {
$name = kubectl get pods | ? { $_ -match "(?<=($PodName-.*))s" } | % { $Matches[1] }
kubectl --server=https://myservername.com --insecure-skip-tls-verify exec -it $name /bin/sh
}

Where-Object(?(的使用只允许更精简的代码,而不必挖掘匹配值的属性,因为-Match将填充$Matches自动变量。然后,管道到Foreach-Object(%(以访问通过$Matches[1]匹配的值尽管不一定需要,但将其保存到$name总体上更具吸引力。最后,将$name传递给您的命令以供执行。

现在您可以使用PodLogin podname进行调用。

这里有一个RegEx演示来解释这种模式。

  • 假设模式总是podname-....,后面跟着一个空格

如果我理解正确,您可以拆分输出,然后将第一个单词分配给变量。kubectl的输出是文本,而不是对象。

$podname = -split (kubectl get pods | select-string mypodname) | select -first 1
$podname
mypodname

podlogin $podname

相关内容

  • 没有找到相关文章

最新更新