使用CSV文件参数化在远程计算机上执行的命令

时间:2017-05-04 21:51:29

标签: powershell csv

我正在整夜工作,现在我觉得我需要帮助:-) 我是Powershell的新手,我已经做了很多研究,但我找不到正确的答案,我希望有人可以帮助我。

我要做的是将IIS应用程序部署到几台服务器。 我设法将应用程序添加到网站,在我的情况下,我使用“默认网站”,其代码如下:

double**

这是servers.txt的内容:

WEB01
WEB02
WEB03

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

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\} }

所以,我想要一个CSV文件,如:

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

我再也不知道了,那里有谁可以提供帮助吗?

1 个答案:

答案 0 :(得分: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的脚本块,因为脚本块在目标计算机上执行, local 变量不可用。

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