当我尝试将布尔变量传递给win_powershell
以在远程访客/目标上注册测试的离散状态时(供以后使用),win_powershell
似乎会阻塞。对于多次尝试提供符合要求的语句,我收到了如下错误:
was not followed by a valid variable name character. Consider using ${} to delimit the name.
Last close parenthesis is an invalid character
Cannot convert string to bool
Colon is unexpected token
$True is unexpected token
Unable to convert to dictionary
Must either be a JSON string or in the key=value form
我的目标是使用Win_PowerShell模块来执行PowerShell脚本……
$IsInstalled = ((gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Match "Microsoft SQL Server").Length -gt 0
..。在远程主机上,并在后面的攻略中使用IsInstalled
变量。(p/s语句在直接调用时执行得非常完美)。
我的任务最终看起来像下面这样,所有不同的/不成功的尝试都被注解掉了。请注意,最后我求助于最简单的测试,它推断通过Win_PowerShell处理布尔值是不可行的。我希望有人能证明我是错的,并且/或者确认我需要通过处理字符串变量来获得这样的解决方案。
顺便说一句(对于无辜的旁观者)在Win_PowerShell的Ansible文档中没有bool这个词的命中。但是,参数的描述包括单词字典和术语key=Value对。如果这些描述是限制,它应该(我希望是)这样陈述(更强调)。
一路上观察到的要点,…
- an=运算符始终生成字符串;对其他变量类型使用json语法;对其他类型(如Boolean)使用a:(冒号)。
- 考虑使用${}来分隔变量名(但如何分隔?)
- 括起任何布尔值等同于单‘
- 我找到了其他一些博客/帖子,但没有任何外行(Json New)术语(我可以理解)。
有没有人有办法让布尔值按要求工作,或者我应该(只是)尝试将所需的状态处理为字符串变量?查看这些博客…
powershell - Variable reference is not valid. ':' was not followed by a valid variable name character如何在双引号字符串中使用对象的属性?
这是我的任务努力(失败的声明被评论)……
- name: Test for installed SQL Server
ansible.windows.win_powershell:
script: |
[CmdletBinding()]
param (
[bool]$IsInstalled
)
# $IsInstalled = ((gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Match "Microsoft SQL Server").Length -gt 0
# $IsInstalled: ((gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Match "Microsoft SQL Server").Length -gt 0
# $IsInstalled: ${ ((gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Match "Microsoft SQL Server").Length -gt 0 }
# ${IsInstalled}: ((gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Match "Microsoft SQL Server").Length -gt 0
# if ( ((gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Match "Microsoft SQL Server").Length -gt 0 ) # last close paren is invalid character
# if ( '((gp HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*).DisplayName -Match "Microsoft SQL Server").Length -gt 0' ) # cannot convert string to bool
if ( $False ) # a sanity check ...
# { $IsInstalled: $True }
# { ${ $IsInstalled}: $True }
# { ${IsInstalled}: $True } # colon is unexpected token
# { ${IsInstalled} = $True } # equals outputs a string; cannot convert to boolean (i knew that but what the hey)
# { ${ $IsInstalled: } $True } # unexpected token $True
{ '$IsInstalled: $True' }
else
# { $IsInstalled: $False }
# { ${ $IsInstalled}: $False }
# { ${IsInstalled}: $False }
# { ${IsInstalled} = $False }
# { ${ $IsInstalled: } $False }
{ '$IsInstalled: $False' }
parameters:
# IsInstalled: $True # cannot convert string to bool
# 'IsInstalled: $True' # is of type System.String ... unable to convert to dict ... must either be a JSON string or in the key=value form"
}
register: SQLtest
我期待第一个(注解)语句起作用;完成。也就是说,将SQLest.IsInstated注册为布尔状态以供以后使用。
1条答案
按热度按时间2w2cym1i1#
这是一个确实有效的解决方案;我无法让模板起作用,...
..。在后面的When条件句中使用...
它总是很简单(一旦你知道怎么做)。