数组中的通配符

时间:2017-12-01 15:12:44

标签: arrays powershell

如何将1709用作通配符?值1709作为$MoveItem.Version存储在数组中,但我无法弄清楚当值来自数组时-like是如何进行的,因为我无法放入通配符*。我也试过做一场比赛。

文件名如下所示:REFW10-X86-1709_01-12-2017.wim

下面的代码工作正常,但我想自动化它,所以一切都来自数组。这可能吗?

Get-ChildItem -Path $OSPathTemp  -Recurse | Where {
    ($_.Name -eq $MoveItem.File) -and
    ($_.Name -like "*1709*")
} | Select-Object -ExpandProperty FullName

$MoveItem.Version包含1607,1706,1709。我想只选择1709的那个。最终输出应该如下所示:

foreach ($MoveItem in $MoveItems) {
    Get-ChildItem -Path $OSPathTemp -Recurse | Where {
        ($_.Name -eq $MoveItem.File) -and
        ($_.Name -like $MoveItem.Version)
    } | Select-Object -ExpandProperty FullName
}

Array看起来像这样:

$MoveItem = @(

[pscustomobject]@{File="REFW10-X86-1709_01-12-2017.wim";Version=1709}
[pscustomobject]@{File="REFW10-X86-1706_01-12-2017.wim";Version=1706}

)

1 个答案:

答案 0 :(得分:0)

所以你有一个名为$MoveItem的散列表(或类似的),它具有一个.File属性是一个文件名,你有一个.Versions属性是一个字符串数组吗?

测试名称:REFW10-X86-1709_01-12-2017.wim

Get-ChildItem -Path $OSPathTemp -Recurse |
    ForEach-Object {
        If ($_.Name -match '-\d{4}_') { $Version = $Matches[0] }

        If ($Version -in $MoveItem.Versions -and
            $_.Name -eq $MoveItem.File) { $_.FullName }
    }