相关疑难解决方法(0)

PowerShell的解析模式:参数(命令)模式与表达模式

任何人都可以解释为什么当从powershell函数返回$ false时你无法使用比较运算符来确定函数是否返回$ false但是当你返回$ true时,比较评估为$ true?

function boolean {
    return $false
}

boolean -eq $false

function boolean {
    return $true
}

boolean -eq $true

>>>False
>>>True
Run Code Online (Sandbox Code Playgroud)

您可以通过将函数调用设置为变量来解决此问题,但我想知道是否有人可以解释这里发生的事情?

function boolean {
    return $false
}

$bool = boolean 
$bool -eq $false

function boolean {
    return $true
}

$bool = boolean
$bool -eq $true

>>>True
>>>True
Run Code Online (Sandbox Code Playgroud)

syntax powershell parsing

5
推荐指数
2
解决办法
373
查看次数

函数中未使用参数的默认值

我有一个非常基本的PowerShell脚本:

Param(
    [string]$MyWord
)

function myfunc([string] $MyWord) {
    Write-Host "$MyWord"
}
myfunc @PSBoundParameters
Run Code Online (Sandbox Code Playgroud)

这是我的执行方式:

PS C:\>。\ test.ps1 -MyWord'hello'
你好

一切都很好。但是,如果-MyWord未指定,我想设置一个默认值。我尝试了这个:

Param(
    [string]$MyWord='hi'
)

function myfunc([string] $MyWord) {
    Write-Host "$MyWord"
}
myfunc @PSBoundParameters 
Run Code Online (Sandbox Code Playgroud)

但是比我的脚本的输出还空。当我不描述参数时,它什么也没打印。(如果我指定了参数,它只会显示“ hello”)。我也尝试过:

Param(
    [string]$MyWord
)

function myfunc([string] $MyWord) {
    [string]$MyWord='hi'
    Write-Host "$MyWord" 
}
myfunc @PSBoundParameters
Run Code Online (Sandbox Code Playgroud)

但是,当然,输出总是“ hi”而不是“ hello”。即使使用参数执行脚本-MyWord 'hello'

有人可以解释我在做什么吗?

当我不使用该功能时,它按预期工作:

Param(
    [string]$MyWord='hi'
)
Write-Host $MyWord
Run Code Online (Sandbox Code Playgroud)

输出:

PS C:\>。\ test.ps1 -MyWord'你好'
哈罗

PS C:\>。\ test.ps1
你好

powershell parameter-passing

1
推荐指数
1
解决办法
2928
查看次数

标签 统计

powershell ×2

parameter-passing ×1

parsing ×1

syntax ×1