Powershell - if $var -like $var*

Ros*_*ons 4 powershell

我正在 Powershell 中使用 SCSM,但遇到了 if 语句的问题。

我有一个函数,它根据作为变量传递给函数的条件收集数据。例子:

$JMLs1 = collectTickets -crit $JMLCriteria1
Run Code Online (Sandbox Code Playgroud)

collectTickets是函数,$JMLCriteria1是通过的标准。

这是collectTickets函数:

function collectTickets
{
    param (
        [parameter (Mandatory=$true)]
        $crit
    )
    $fullDate = Get-Date
    if ($fullDate.DayOfWeek -eq 'Monday') 
    {
        $olderThan = $fullDate.AddDays(-4)
    }
    elseif ($fullDate.DayOfWeek -eq 'Tuesday') 
    {
        $olderThan = $fullDate.AddDays(-4)
    }
    else 
    {
        $olderThan = $fullDate.AddDays(-2)
    }
    if ($crit -like '$JML*') 
    {
        $data = Get-SCSMObject -Criteria $crit | select 'Id', 'Title', 'LastModified', 'Priority'
    }
    else 
    {
        $data = Get-SCSMObject -Criteria $crit | Where-Object {($_.LastModified -lt $olderThan)} | select 'Id', 'Title', 'LastModified', 'Priority'
    }
    return $data
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是第二个 if 语句if ($crit -like '$JML*')- 我不确定我们是否可以对变量使用这样的通配符,或者语法是否不正确。

只是为了澄清将有多个$JML标准变量以及多个其他标准变量,但这只是$JML我想要区别对待的标准变量。

gms*_*man 5

使用双引号代替单引号。使用单引号,PowerShell 认为您正在寻找文字 string $JML,而不是变量。

if ($crit -like "$JML*")
Run Code Online (Sandbox Code Playgroud)

编辑: about_Quoting 文档