2017-05-04 64 views
1

我就彻夜狂欢工作执行命令,现在我想我需要帮助:-) 一个是新的PowerShell和我已经做了很多的研究,但我不能找到正确的答案,我希望这里有人能帮助我。使用CSV文件进行参数的远程机器上

我想要做的是将IIS应用程序部署到几个服务器。 我设法将应用程序添加到网站上,在我的情况,我用了“默认Web站点”使用下面的代码:

Get-Content c:\scripts\servers.txt | Foreach { Invoke-Command -ComputerName $_ {Import-Module WebAdministration ; New-WebApplication -Site "Default Web Site" -Name TestRico2 -PhysicalPath C:\inetpub\wwwroot\} } 

这是servers.txt的内容:

WEB01
WEB02
WEB03

这实际上工作正常。但我想实现的是,其他项目都是可动态:

-Site "Default Web Site" 
-Name TestRico2 
-PhysicalPath C:\inetpub\wwwroot\ 

所以,我希望有一个CSV文件,如:

server,site,name,path 
WEB01,Default Web Site,Application-name,c:\inetpub\wwwroot\ 
WEB02,Default Web Site,Application-name2,c:\inetpub\wwwroot2\ 

我不知道了,有没有有谁可以帮忙?

回答

1

Import-Csv读取CSV文件,并将每个输入行表示为自定义对象,其属性是为CSV列标题命名的,其值是各行的列值。

因此,使用Import-Csv代替Get-Content和访问感兴趣的值,如手头的输入对象的属性,$_

Import-Csv c:\scripts\servers.csv | ForEach-Object { 
    Invoke-Command ComputerName $_.server { 
    param($site, $name, $path) 
    Import-Module WebAdministration; 
    New-WebApplication -Site $site -Name $name -PhysicalPath $path 
    } -Args $_.site, $_.name, $_.path 
} 

注意如何性质$_.site$_.name$_.path作为参数来传递脚本块传递到Invoke-Command,因为脚本块在目标机器上执行,其中本地变量不是av ailable。

在PSv3 +或更高,则替代传递参数是使用$using:范围指局部变量直接脚本块内 - 见
Get-Help about_Remote_Variables

相关问题