PowerShell脚本对2列csv文件中的数据执行2个不同的命令



使用PowerShell,我试图从CSV文件中获取信息,并执行基于两列数据的两个命令。第一部分数据是一个资产,它需要将一个唯一文件复制到一个文件夹中,并已重命名为config.txt。

第二段数据是计算机的名称,以便将收到唯一文件的文件夹复制到指定的计算机。例如,

第一个命令:

Copy-Item "c:folder1$asset.txt" -Destination "f:folder2config.txt"

第二个命令:

robocopy /e folder2 \$ComputerNamefolder3

数据导入自csv文件,该文件有assetcomputername两列。下面的脚本是许多变体中的一个,包括下面的脚本在内,没有一个是有效的。如有任何帮助,不胜感激。

Computers.csv包含以下

A12345  CN12345
A54321  CN54321

脚本:

Import-Csv -Delimiter ',' -Path c:tempcomputers.csv -Header 'Asset','ComputerName’ | 
ForEach-Object {
$asset += $_.asset
$ComputerName += $_.NBN
Copy-Item "c:folder1$asset.txt" -Destination "f:folder2config.txt"
robocopy /e  f:folder2 \$ComputerNamefolder3 
}

我已经完成了脚本,结果如下。脚本做了我想要的,除了我必须手动更改数组中项目的位置。我想让它自动完成,但我还没想好那部分。我期望csv文件包含50个或更多的资产和计算机名,并且不期望输入每个项目的位置并运行脚本50次。有没有一种自动遍历数组的方法?

$computers = Import-Csv -Path c:tempcomputers.csv -Header 'Asset','ComputerName'$asset = $computers[0].asset$ComputerName = $computers[0]。ComputerName

ForEach-Object {

Copy-Item "c:folder1$asset.txt" -Destination "f:folder2config.txt"

robocopy /e /is "f:folder2" "\$ComputerNamec$folder3"  
}

首先,确保您的csv不包含标题。如果是这样,并且您使用-header标志,则将向内容添加重复的标头。

我使用csv测试了这个解决方案,没有头,内容如下:

abc,123,
def,456,
ghi,789

每当我调试涉及在循环中访问值的代码时,我喜欢编写一些代码将这些值写入控制台,像这样:

$assetIndex = 0
Import-Csv -Header Asset,ComputerName -Path C:noHeader.csv | 
ForEach-Object {
Write-Host ([string]::Concat('Asset at index ',$assetIndex, ': The asset value is "', $_.Asset, '", The computer name is "', $_.ComputerName,'"'))
$assetIndex++
}

运行该语句将证明我们正确地访问了循环中的值。最后,当使用$_访问值时,字符串连接在循环内可能会有点混乱。

下面是如何在循环中构建copy-item文件路径的两个示例:

#example 1
"c:folder1$($_.asset).txt"
#example 2
[string]::Concat('c:folder1',$_.Asset, '.txt')

把它们放在一起我们得到:

Import-Csv -Header Asset,ComputerName -Path C:noHeader.csv | 
ForEach-Object {
Copy-Item "c:folder1$($_.asset).txt" -Destination "f:folder2config.txt"
robocopy /e /is "f:folder2" "\$($_.ComputerName)c$folder3" 
}

当把变量放在引号内时,如果你想访问该变量的属性,那么你需要使用$($myVariable.someProperty)语法,否则.someProperty将被解释为字符串。

相关内容

  • 没有找到相关文章

最新更新