0

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

我有一个目录,其中包含一系列 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}

在我的一生中,我无法获得正确的语法来在脚本中运行它。我认为这只是连接的问题,但我不是 100% 确定。这是我使用脚本的地方。

$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 也可能是一个问题?

提前感谢您的帮助。

4

1 回答 1

2

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

New-Item ('IIS:\Sites\' + $_.Name) -Type VirtualDirectory -PhysicalPath $_.Path

顺便说一句,您对$dirs的意图是什么?它将被分配New-Item$dirs = Get-ChildItem IIS:\Sites\命令的输出,这将是一个 DirectoryInfo 对象数组(与创建所有这些目录后得到的相同)。那是你要的吗?

于 2013-09-16T22:12:52.130 回答