2017-05-04 57 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

相關問題