【问题标题】:PowerShell: How can I handle current object from a csv.file?PowerShell:如何处理来自 csv.file 的当前对象?
【发布时间】:2014-07-15 20:56:58
【问题描述】:

我正在尝试根据计算机上当前的操作系统安装一些程序。我的 .csv 文件如下所示:

OperatingSystem, Program
Microsoft Windows 7, Microsoft .NET Framework
Microsoft Windows 7 Enterprise, Skype
Microsoft Windows 7, Oracle Client
Windows XP, Skype
Windows XP, Adobe Reader

我写了这段代码:

##Determine OperatingSystem
$os = gwmi win32_operatingsystem  
$a = $os | % {$_.caption}

##Programs needed to be installed
$test=import-csv "C:\Documents and Settings\Nistru\Desktop\Kituri\Fisier.txt." |
                where-object {$_.OperatingSystem -like "Microsoft Windows 7*"} |
                select-object Program

如果$_.OperatingSystem 等于变量$a,有什么方法可以检查where-object 块,这样我就不必为每个操作系统重新编写代码了?

【问题讨论】:

  • 从阅读help ForEach-Object开始。
  • @Bill_Stewart 这没什么用,他在Where 声明方面最需要帮助。

标签: powershell csv


【解决方案1】:

您可以轻松地将字符串“Microsoft Windows 7”替换为变量$a - 尽管我不认为这正是您的意思。您正在使用-like 运算符,并且在硬编码字符串中有一个*,所以我想您正在寻找任何版本的Win7 - 一个稍微复杂的问题。这是一个建议:

将您的输入 CSV 文件修改为(可选)包含通配符。在您的比较中它会正常工作,您可以将 Where-Object cmdlet 更改为:

Import-CSV Fisier.txt | ? { $os.Caption -like $_.OperatingSystem }

不带通配符的-like 运算符会将比较与等号基本相同,因此它也可用于显式操作系统匹配。只要确保在您想要匹配的地方包含*,无论版本如何。

旁注:我不确定您为什么要通过 For-EachObject 运算符传递 $os 变量只是为了选择标题属性。只需将其作为属性引用就足够了:$os.Caption

这是我使用带通配符的修改后的 CSV 检查的脚本(和输出):

PS C:\>$os = gwmi win32_operatingsystem
PS C:\>Import-CSV Fisier.txt | ? { $os.Caption -like $_.OperatingSystem }
OperatingSystem        Program
---------------        -------
Microsoft Windows 7*   Microsoft .NET Framework
Microsoft Windows*     Oracle Client

和 CSV 文件:

OperatingSystem, Program
Microsoft Windows 7*, Microsoft .NET Framework
Microsoft Windows 7 Enterprise, Skype
Microsoft Windows*, Oracle Client
Windows XP, Skype
Windows XP, Adobe Reader

【讨论】:

  • 我删除了 $os 的管道,你是对的。实际上,我确实想用变量 $a 替换字符串“Microsoft Windows 7”。变量 $a 将根据安装的操作系统具有不同的值。但是如果我只是用 $a 替换字符串,我的 $test 变量什么也不会返回'不明白为什么它不起作用...也许$_.OperatingSystem和$a(即$os.caption)有不同的类型,我无法比较它们?对不起,我一直在打扰你!
  • 现在它工作得很好,变量 $test 返回我想要的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2020-02-16
相关资源
最近更新 更多