【问题标题】:Different language in PowerShell variable in script performing in Ansible在 Ansible 中执行的脚本中的 PowerShell 变量中的不同语言
【发布时间】:2021-04-29 14:21:58
【问题描述】:

你好!
我在剧本中有任务在 powershell 中运行代码

---
- name: Include vars 
  include_vars:
    file: "global.yml"

- name: Create failover cluster
  become: yes
  become_user: "{{ domain.domain_admin }}"
  become_flags: logon_type=interactive logon_flags=with_profile
  become_method: runas
  vars:
    ansible_become_pass: "{{ domain.password }}"
  win_shell: |
        ## Adding Witcher Disk
        $Quorum_disk = (Get-Volume | Where-Object {$_.FileSystemLabel -eq "Quorum"} | Get-Partition | Get-Disk).Number
        $CLuster_Quorum = (Get-ClusterAvailableDisk | Where-Object {$_.Number -eq $Quorum_disk}).Name
        $CLuster_Quorum >> C:\1.txt
        Get-Culture >> C:\1.txt
        Get-ClusterAvailableDisk | Where {$_.Number -eq $Quorum_disk} | Add-ClusterDisk
        Start-Sleep -Milliseconds 1500
        Set-ClusterQuorum -DiskWitness $CLuster_Quorum

在 $CLuster_Quorum 我有磁盘的名称。当我在 Powershell ISE 的本地服务器上运行此代码时,变量包含俄语符号并且一切正常。 Ansible 将值放在英语语言和任务崩溃的变量中。我尝试使用 win_comand 在单独的文件中执行此代码,但问题相同。 Get-Culture 告诉我 Ansible 使用遵循区域设置:
LCID - 1049
名称 - ru-RU
DisplayName - 俄语(俄罗斯)

有人遇到过这样的问题吗?
我正在使用 PowerShell 4.0 和 Windows Server 2012R2。 Ansible 有 2.9 版并安装在 Ubuntu 20.04 上

提前谢谢你!

错误信息

"stderr": "Set-ClusterQuorum : 打开资源时出错 'Cluster Disk 1'line:15 char:5 Set-ClusterQuorum -DiskWitness $CLuster_Quorum CategoryInfo ObjectNotFound: (:) [Set-ClusterQuorum],ClusterCmdletException FullyQualifiedErrorId : ClusterObjectNotFound,Microsoft.FailoverClusters.PowerShell.SetClusterQuorumCommand", "stderr_lines": ["Set-ClusterQuorum : 打开时发生错误 资源 'Cluster Disk 1'.", "At line:15 char:5", Set-ClusterQuorum -DiskWitness $CLuster_Quorum", CategoryInfo, ObjectNotFound: (:) [Set-ClusterQuorum], ClusterCmdletException 完全限定错误 ID: ClusterObjectNotFound,Microsoft.FailoverClusters.PowerShell.SetClusterQuorumCommand"], "stdout": "报告文件位置:C:\Windows\cluster\Reports\Create 集群向导 VSRVCLS 于 2021.04.29 VSRVCLS Диск кластера 1
"stdout_lines": ["报告文件位置: C:\Windows\cluster\Reports\Create Cluster Wizard VSRVCLS on 2021.04.29 在 16.17.18.mht" "名称"----
"VSRVCLS Диск кластера 1

【问题讨论】:

  • 我没有关注您所面临的实际问题(部分原因是您没有包含任何错误消息);是不是字符串文字 "Quorum" 不匹配,因为 FileSystemLabel 是别的东西?请考虑阅读MCVE 部分
  • 你好@mdaniel!标签匹配。我附上了错误消息,问题是由于使用的语言。当我在本地服务器上的 Powershell ISE 中运行脚本时,$CLuster_Quorum 是“Диск кластера 1”并且一切正常。 Ansible 将“Cluster Disk 1”放入 $CLuster_Quorum 导致错误,因为“Cluster Disk 1”由于语言问题在系统中不存在。
  • 如果一个属性被这样本地化,那么肯定有一个更永久的标识符可以使用,它不受本地化的影响。也就是说,stackoverflow.com/a/7770511 暗示 domain.domain_admin 的区域设置可能不是 ru-RU,因为听起来您本地服务器的帐户是

标签: powershell ansible


【解决方案1】:

问题出在 win_shell 模块上。我尝试使用 ansible.windows.win_powershell 并有所帮助。变量开始包含我需要的语言符号。

感谢您抽出宝贵时间!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多