none
powershell任务脚本请教 RRS feed

  • 问题

  • 此处问题做简化模型处理 D:\Hotfix 目录存在下列补丁
    Windows6.1-KB4019990-x64.msu
    Windows6.1-KB4040980-x64.msu
    Windows6.1-KB4054518-x64.msu
    Windows6.1-KB4483458-x64.msu
    Windows6.1-KB4486563-x64.msu

    存在 D:\Need_Hotfix.txt 内容如下 每一行为一个KB补丁号
    KB4054518-x64
    KB4483458

    现想取出 D:\Hotfix 中包含D:\Need_Hotfix.txt 补丁号码的补丁名称合集,后通过名称复制出来,主要在探讨方法,我的思路如下
    1、取出D:\Hotfix补丁名称,用"-"分割,取出含"KB"那一段 即为目录下所有补丁的KB号码合集,存入变量
    $Name_KB = (Get-ChildItem D:\Hotfix).name | % { $_  -split "-"} | ? {$_ -like  "*KB*" }
    2、读取D:\Need_Hotfix.txt 内容获取需要安装的 补丁号码合集
    $Need = Get-Content D:\Need_Hotfix.txt
    3、比较两个字符集数组变量 取出合集 都有的KB号码
    $Euual = ((Compare-Object $Need $Name_KB -IncludeEqual | ? {$_.SideIndicator -like "==" }).InputObject).Trim()

    如何 通过D:\Need_Hotfix.txt或者合集$Euual,取出 D:\Hotfix 中包含前面合集的文件名称合集,
    有人让我用Group-Object创建哈希表试一试,没尝试出来,还望指点一下,不胜感谢啊!
    2019年6月28日 8:38

答案

  • 你好,

    谢谢你的提问。

    如果你只是想要输出包含相同kb号的文件名你可以使用以下脚本来实现,它将会将具有相同KB号的文件名称保存在$out变量中。

    $files=Get-ChildItem "C:\Hotfix"
    $out=@()
    foreach($filename in $files)
    {
      $kb=($filename.name -split "-")[1]
      Get-Content "C:\Hotfix\Need_Hotfix.txt" | %{ if($_ -eq $kb){ $out+=$filename.Name }}
    }
    $out

    最好的祝福,

    Lee



    Just do it.

    • 已标记为答案 badacook 2019年7月2日 11:18
    2019年7月1日 9:06
  • 你好,

    $out=@() 

    这里我定义了一个空的数组并赋值给了变量out.

    $out+=$filename.Name

    在这个循环中,将满足条件的文件名添加到变量out中,即那个数组中。

    希望这可以帮助到你!

    工作顺利。

    Lee


    Just do it.

    • 已标记为答案 badacook 2019年7月3日 5:58
    2019年7月2日 14:01

全部回复

  • 你好,

    谢谢你的提问。

    如果你只是想要输出包含相同kb号的文件名你可以使用以下脚本来实现,它将会将具有相同KB号的文件名称保存在$out变量中。

    $files=Get-ChildItem "C:\Hotfix"
    $out=@()
    foreach($filename in $files)
    {
      $kb=($filename.name -split "-")[1]
      Get-Content "C:\Hotfix\Need_Hotfix.txt" | %{ if($_ -eq $kb){ $out+=$filename.Name }}
    }
    $out

    最好的祝福,

    Lee



    Just do it.

    • 已标记为答案 badacook 2019年7月2日 11:18
    2019年7月1日 9:06
  • 非常感谢,你的支持 ,还想请问一下

    $out=@()

    $out+

    两个 怎么理解 能稍微解释一下嘛

    • 已编辑 badacook 2019年7月2日 11:22
    2019年7月2日 11:19
  • 你好,

    $out=@() 

    这里我定义了一个空的数组并赋值给了变量out.

    $out+=$filename.Name

    在这个循环中,将满足条件的文件名添加到变量out中,即那个数组中。

    希望这可以帮助到你!

    工作顺利。

    Lee


    Just do it.

    • 已标记为答案 badacook 2019年7月3日 5:58
    2019年7月2日 14:01
  • 非常感谢 
    2019年7月3日 6:01