PowerShell for-each cleanup

时间:2017-03-10 18:03:10

标签: powershell

我知道PowerShell是v5,但由于我是PowerShell的新手,我一直在寻找Stack Overflow来生成我的脚本。我发现我需要一种通用的非特定版本的方法来完成这个过程...

以下是问题 - 第1步 - 我从注册表中提取应用程序安装位置信息,并使用临时文件存储结果。

dir "HKLM:\SOFTWARE\Wow6432Node\companyname" | Get-ItemProperty | Select installdir | Out-File "$env:USERPROFILE\Desktop\KDI-Admin\Export\$env:COMPUTERNAME-SC-Installs.txt"

这为我提供了安装在特定计算机上的公司软件的安装目录列表。然后,我想要获取这些结果,将* .config附加到每一行,并获取这些结果并将* .xml附加到每一行,然后输出到新的文本文件。

进程的输入将是初始结果文件的内容,输出文件应该在第一个结果中列出每一行,添加到最终结果文件中,一旦附加* .xml,并且一次附加*的.config。

我正在寻找的净效果是为7z命令创建@file。我正在尝试使用以下内容 -

(Get-Content "$env:USERPROFILE\Desktop\KDI-Admin\Export\$env:COMPUTERNAME-SC-Installs.txt") -replace '\S+$','$&*.config' | Out-File "$env:USERPROFILE\Desktop\KDI-Admin\Export\$env:COMPUTERNAME-SC-config.txt" -Encoding utf8
(Get-Content "$env:USERPROFILE\Desktop\KDI-Admin\Export\$env:COMPUTERNAME-SC-Installs.txt") -replace '\S+$','$&*.xml' | Out-File "$env:USERPROFILE\Desktop\KDI-Admin\Export\$env:COMPUTERNAME-SC-config.txt" -Append -Encoding utf8

但是,我只得到一行* .xml和一行附加* .config的行 -

Get-Content Output

在达到这个目标之后,我认为需要一些for-each循环,但是我没有得到任何可以从这里尝试适应的东西。我现在正在寻找将三条线组合成一个函数的方法(如果可能的话),并通过在同一步骤中读取和输出来消除第一个命令中的临时文件步骤。这还需要从输出中删除“installdir”和“----------”行。任何人都有一些想法和可能的例子吗?

1 个答案:

答案 0 :(得分:1)

采用上述命令dir "HKLM:\SOFTWARE\Wow6432Node\companyname" | Get-ItemProperty | Select installdir | Out-File "$env:USERPROFILE\Desktop\KDI-Admin\Export\$env:COMPUTERNAME-SC-Installs.txt",您可以将查询结果放入变量$result

$result = dir "HKLM:\SOFTWARE\Wow6432Node\microsoft" | Get-ItemProperty | Select installdir;

从那里你可以轻松地遍历数组,跳过空数组并处理其余部分:

foreach($path in $result.installdir) 
{ 
    # skip empty paths
    if([string]::IsNullOrWhiteSpace($path)) { continue; } 

    # now do your processing ...    
    $path; 
}

这是你要求的吗?