首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换文件中的变量时出现Invoke-Expression意外令牌错误

替换文件中的变量时出现Invoke-Expression意外令牌错误
EN

Stack Overflow用户
提问于 2020-01-17 19:52:14
回答 1查看 610关注 0票数 0

我想用powershell更改我的deploy.yaml文件的版本。我的文件(deploy.yaml):

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: worker
  labels:
    app: worker
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: worker
    spec:
      nodeSelector:
        environment: production
        role: apps
      containers:
      - name: worker
        image: https://hub.docker.com/worker:$version
        env:
        - name: ENVIRONMENT
          value: "Production"
        - name: LOGS_DIRECTORY
          value: "/var/log/worker/"

当我执行powershell时:

代码语言:javascript
复制
$version = "1.01"
$workerTemplate = (Get-Content ./deploy.yaml) -join "`n"
$expandedWorkerTemplate = Invoke-Expression "`"$workerTemplate`""

我得到了错误:

代码语言:javascript
复制
Invoke-Expression : At line:22 char:19
+           value: "Production"
+                   ~~~~~~~~~~~
Unexpected token 'Production"
        - name: LOGS_DIRECTORY
          value: "/var/log/worker/""' in expression or statement.
At line:4 char:27
+ $expandedWorkerTemplate = Invoke-Expression "`"$workerTemplate`""
+                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : UnexpectedToken,Microsoft.PowerShell.Commands.InvokeExpressionCommand

我能做些什么来避免这种情况?

EN

回答 1

Stack Overflow用户

发布于 2020-01-17 20:37:55

我认为,对于PowerShell的format string operator来说,这将是一项不错的工作

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: worker
  labels:
    app: worker
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: worker
    spec:
      nodeSelector:
        environment: production
        role: apps
      containers:
      - name: worker
        image: https://hub.docker.com/worker:{0}
        env:
        - name: ENVIRONMENT
          value: "Production"
        - name: LOGS_DIRECTORY
          value: "/var/log/worker/"

然后展开模板,如下所示:

代码语言:javascript
复制
$version = "1.01"
$workerTemplate = Get-Content ./deploy.yaml -Raw
$expandedWorkerTemplate = $workerTemplate -f $version
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59786827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档