导入CSV foreach循环过程

时间:2013-09-16 19:32:20

标签: iis powershell foreach

我正在处理一个问题,我似乎无法正确使用语法。

我有一个目录,其中包含一系列csv文件,每个文件都包含一个旧IIS6计算机的虚拟目录和路径列表。我正在重新创建一台新的IIS7.5计算机,我可以通过转到目录“iis:\ sites \ Atlanta”并运行此命令,一次添加一个目录。

Import-Csv C:\Users\MIGXHZ700\Desktop\Atlanta.csv | Where-Object {$_.Path -match "\\"} | ForEach-Object {New-Item $_.Name -Type VirtualDirectory -physicalPath $_.Path}

对于我的生活,我无法在脚本中运行此语法。我认为这只是串联问题,但我并不是百分百肯定。这是我使用脚本的地方。

$dirs = ls C:\Users\[blah]\Desktop\*.csv | foreach-object {
    Import-Csv $_ | 
    Where-Object {$_.Path -match "\\"} |
    ForEach-Object {New-Item 'IIS:\Sites\'+$_.Name -Type VirtualDirectory -physicalPath $_.Path}
}

在Foreach中进行Foreach也可能是一个问题?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

'IIS:\Sites\'+$_.Name不是 New-Item 的有效参数,因为 -Path 参数采用字符串参数,但这是一个表达式。它是计算表示要创建的项目的路径的字符串的表达式,但是您需要通过将其括在括号中来评估它:

New-Item ('IIS:\Sites\' + $_.Name) -Type VirtualDirectory -PhysicalPath $_.Path
顺便说一下,你对 $ dirs 的意图是什么?它将被分配 New-Item 命令的输出,该命令将是DirectoryInfo对象的数组(与创建所有这些目录后从$dirs = Get-ChildItem IIS:\Sites\获得的对象相同)。这就是你想要的吗?