【问题标题】:Powershell Match input from 2 containers with Like WildcardPowershell 匹配来自 2 个带有 Like Wildcard 的容器的输入
【发布时间】:2017-10-03 08:29:54
【问题描述】:

powershell 新手,我有点卡住了。

我想用 WMI 获取所有 SCCM Tasksequnece,并将它们与图像名称匹配

$TaskSequence = Get-WmiObject -Namespace "root\SMS\site_$($SiteCode)" -Class SMS_TaskSequencePackage -ComputerName $SiteServer 

$ImagePackage = Get-WmiObject -Namespace "root\SMS\site_$($SiteCode)" -Class SMS_ImagePackage -ComputerName $SiteServer

$TaskSequence.name 的输出是

Windows Server 2012 R2 X64
Windows 10 企业版 x64 USMT 完整操作系统
升级 1703
Windows 10 企业版 x64 USMT 硬链接
Windows 7 Enterprise x64 zh-CN
Windows 10 企业版 x64 1703 zh-CN
Windows 服务器 2016

$ImagePackage.name 的输出是
Windows Server 2016 x64
Windows 10 企业版 x64

我尝试了这个 foreach 循环,但似乎无法让它工作,这篇文章有 7 个提示,应该只有 4 个提示,3 个 Windows 10 和 1 个 Windows server 2016

foreach ($TS in $TaskSequence ) { 

Get-WmiObject -Namespace "root\SMS\site_$($SiteCode)" -Class SMS_TaskSequencePackage -ComputerName $SiteServer | 
    ForEach-Object{
        Get-WmiObject SMS_ImagePackage -Namespace "root\SMS\site_$($SiteCode)" -ComputerName $SiteServer | Where-Object { $_.name -like "*$($TS.Name)*"} 
    }

}

【问题讨论】:

    标签: powershell foreach match wildcard


    【解决方案1】:

    编辑: 问题稍微改变后,这里是新代码:

    $SiteCode = "SiteCode"
    $SiteServer = "Server"
    $TaskSequence = (Get-WmiObject -Namespace "root\SMS\site_$($SiteCode)" -Class SMS_TaskSequencePackage -ComputerName $SiteServer)
    $ImagePackage = (Get-WmiObject -Namespace "root\SMS\site_$($SiteCode)" -Class SMS_ImagePackage -ComputerName $SiteServer)
    
    Foreach($Task in $TaskSequence){
        foreach($Image in $ImagePackage){ 
            if($Task.Name -like "*$($Image.Name)*" -or $Image.Name -like "*$($Task.Name)*"){ 
                $Task
                #I have no idea what you want to do with this object
            } 
        }
    }
    

    【讨论】:

    • 请看上面的评论
    • 我不明白你的问题。答案应该符合您在问题中的要求
    • @user7490700 请不要发布问题作为答案
    • 评论太长了,所以我不能发布它。我需要这样适应它,你能帮忙吗? Foreach($Task in $TaskSequence){ foreach($Image in $ImagePackage){ if($Task -like "*$Image*"){ $TaskSequencePackage = Get-WmiObject -Namespace "root\SMS\site_$($SiteCode)" -Class SMS_TaskSequencePackage -ComputerName $SiteServer| where-object {$_.Name -like ("*" + $Task.Name + "*") } $TaskSequencePackage.Get() } } }
    • 我已更改代码。但我不明白你想用任务变量做什么
    猜你喜欢
    • 2017-11-10
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多