如何输出$ true或$ false?

时间:2017-10-09 19:33:04

标签: powershell file-io boolean

我正在编写一个PowerShell模板系统,我已为其创建了一个我想用实际变量值替换的变量占位符。 例如,<%$myvar%>应替换为$myvar值。

当值为$true$false时,我很难找到将其输出到文件的方法。 作为一种解决方法,我将$true替换为1,将$false替换为0,但我想知道它是否可以按字面输出它们。

以下是我的代码部分:

Get-Content myfile.ps1 | %{
    if ($_ -match '<%(.*)%>') { #replace variable placeholder with actual value
        $tag = $Matches[0]
        Write-Verbose "found variable placeholder: $tag"
        $variablename = $matches[1] -replace '^\$','' #remove $ char so we can use it in Get-Variable
        Write-Verbose "variablename: $variablename"
        [string]$newvalue = Get-Variable $variablename |
                            select -ExpandProperty value
        if ($newvalue.ToLower() -eq "true") {
            $newvalue = 1
        }
        if ($newvalue.ToLower() -eq "false") {
            $newvalue = 0
        }
        Write-Verbose "new-value: $newvalue"
        $newline = $_ -replace [Regex]::Escape($tag), $newvalue
        $newline | Out-File newfile.ps1 -Append
    }

注意:如果您有兴趣,可以在my profile找到该项目的链接。

1 个答案:

答案 0 :(得分:4)

您当前的方法存在的一个问题是价值为truefalse的字符串会替换为10不是吗?< / p>

另请注意,您正在将值转换为字符串,这可能会破坏其他值。

您可能要做的是首先检查值是否为[bool],然后如果是,则只需将$添加到字符串值:

$newvalue = Get-Variable $variablename -ValueOnly
if ($newvalue -is [bool]) {
    $newvalue = "`$$newvalue"
}