【问题标题】:powershell use CSV to create variablespowershell 使用 CSV 创建变量
【发布时间】:2018-08-08 19:46:22
【问题描述】:

谈到 powershell,我完全是个新手。我想创建一个小脚本来节省大量时间,经过一番研究,我确信可以使用 Import-CSV 命令来实现。

基本上我需要在多台 PC 上运行一个命令,但每个命令的变量都不同。我希望从 CSV 文件中的比较中提取该变量。因此,找到当前主机名,然后使用该主机名在 CSV 中查找相应的资产编号,然后将该资产编号用作最终命令中的变量。

看看这里的其他例子,到目前为止我有这个:

$Asset = @()
$Host = @()

Import-Csv -Path "C:\hostnametoasset.csv" |`
ForEach-Object {
    $Asset += $_.Asset
    $Host += $_.Host
}

$Hostname = (Get-WmiObject -Class Win32_ComputerSystem -Property Name).Name

if ($Host -contains $Hostname)
{
C:\BiosConfigUtility64.exe /setvalue:"Asset Tracking Number","$Asset"
}

CSV 部分:

Asset,Host
10756,PCD001
10324,PCD002
10620,PCD003

任何帮助将不胜感激。

【问题讨论】:

  • 1.不要使用$Host 作为变量名(它是一个内置变量)。 2. 您没有在 BIOS 实用程序配置命令中使用任何主机名,因此不清楚为什么首先需要主机名。
  • 是的,我将 $Host 换成了 $Name 并更新了我的 CSV。需要主机名在 CSV 中进行比较以返回资产编号

标签: powershell import-csv


【解决方案1】:

几个不同的点... 导入 CSV 会生成一组可以过滤的对象。

$Lines = Import-Csv -Path "C:\hostnametoasset.csv"
$Line = $Lines | ?{$_.host -match $ENV:COMPUTERNAME}

然后您可以通过访问您需要的成员直接使用过滤结果。

C:\BiosConfigUtility64.exe /setvalue:"Asset Tracking Number","$($Line.Asset)"

注意:我现在不能直接测试这个,所以希望我的语法是正确的。

【讨论】:

  • 非常感谢。最终的脚本如下所示:$csv = Import-Csv -Path "\\lsqus009\HPSSM\BCU\hostnametoasset.csv" $Line = $csv | ?{$_.Name -match $ENV:COMPUTERNAME} \\lsqus009\HPSSM\BCU\BiosConfigUtility64.exe /setvalue:"Asset Tracking Number","$($Line.Asset)" 它运行良好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 2015-06-24
  • 1970-01-01
  • 2016-06-27
  • 2021-11-18
相关资源
最近更新 更多