在变量 SaltStack 中使用 PS 命令

Using the PS command in the variables SaltStack

我有一个状态,如果文件夹存在或不存在,它应该给我一个输出。 我不知道如何转义文件夹 Programs files 的名称,所以 PS 明白我的意思。

{% set label = salt['cmd.run']('powershell.exe "test-path \"$env:SystemDrive\Program Files (x86)\Folder\""') %}

{% if label == 'True' %}
  First:
    cmd.run:
      - name: Write-Host "Exist"
      - shell: powershell

{% else %}
  Secondary:
    cmd.run:
      - name: Write-Host " NOT "
      - shell: powershell
{% endif %}

我每次尝试都没有,但文件夹存在

你能告诉我怎么做吗?我在哪里可以找到有关如何在 YAML

中转义行的信息

问题很可能不在对 powershell.exe 的调用中,因为这是我 运行 从 cmd.exe 命令提示符中得到以下内容时得到的结果:

C:\>powershell.exe "test-path \"$env:SystemDrive\Program Files (x86)\DoesntExist\""
False

C:\>powershell.exe "test-path \"$env:SystemDrive\Program Files (x86)\""
True

我建议使用 Saltstack file module 来检查具有 directory_exists 功能的目录是否存在。

这允许我们使用 requisite system 触发更多状态。

示例:

check-dir-exists:
  module.run:
    - name: file.directory_exists
    - path: 'C:\Program Files (x86)\SomeDirectory'

show-dir-exists:
  cmd.run:
    - name: Write-Host "Dir exists"
    - shell: powershell
    - require:
        - module: check-dir-exists

show-dir-not-exist:
  cmd.run:
    - name: Write-Host "Dir not exists"
    - shell: powershell
    - onfail:
        - module: check-dir-exists

或者将return的值True/False存入一个变量中,并在if/else语句中匹配条件

示例:

{% set label = salt['file.directory_exists']('C:\Program Files (x86)\SomeDirectory') %}

{% if label %}
show-dir-exists:
  cmd.run:
    - name: Write-Host "Dir exists"
    - shell: powershell
{% else %}
show-dir-not-exist:
  cmd.run:
    - name: Write-Host "Dir not exists"
    - shell: powershell
{% endif %}