2015-01-16 121 views
0

每當爲我公司的FTP客戶端創建一個FTP文件夾時,我必須在兩臺服務器上創建兩個文件夾;服務器A和服務器B.我試圖給出下面的例子。在文件路徑中調用變量的Powershell腳本?

E:\FTP\CompanyName 
E:\FTP\CompanyName\Incoming 
E:\FTP\CompanyName\Outgoing 

在兩臺服務器上都需要看起來像這樣。手動操作並不難,但我想學習Powershell,那麼爲什麼不自動完成一項簡單的任務呢?以下是我目前擁有的內容:

$Company = Read-Host 'Enter Company Name:' 
$Credentials = Get-Credential 

Write-Host 'Thank you! Creating client FTP folder on ServerA.' -ForegroundColor Magenta -BackgroundColor White 

Invoke-Command ServerA {mkdir ("e:\ftp" + $Company + "\INCOMING")} -Credential $Credentials 
Invoke-Command ServerA {mkdir ("e:\ftp" + $Company + "\OUTGOING")} -Credential $Credentials 

Write-Host 'Done. Now creating duplicate folder on ServerB.' -ForegroundColor Magenta -BackgroundColor White 

Invoke-Command ServerB {mkdir e:\ftp\$Company\INCOMING} -Credential $Credentials 
Invoke-Command ServerB {mkdir e:\ftp\$Company\OUTGOING} -Credential $Credentials 

Write-Host 'Done.' -ForegroundColor Magenta -BackgroundColor White 

我們有一組專門用於服務器訪問的管理員憑據。腳本要求輸入這些憑據,然後詢問「CompanyName」。理論上,我希望將該變量應用於文件路徑的「CompanyName」部分。

我在腳本中嘗試了兩種不同的方式來測試。他們都完全跳過變量,只需在E:\ ftp中創建一個傳入和傳出文件夾。我在這裏錯過了什麼?

關於如何清理我的腳本的任何其他建議也是受歡迎的。我從中學到了很多東西,但還有很多東西需要學習。

回答

1

變量$company在其他服務器的會話中不存在,所以它不能用於創建文件夾。

可以使用的Invoke-Command-Argumentlist參數像這樣通過您的變量:

Invoke-Command ServerA {mkdir ("e:\ftp" + $args[0] + "\INCOMING")} -ArgumentList $Company -Credential $Credentials 
+0

謝謝,我會仔細看看事物的整個參數方面。我甚至沒有意識到變量不會存在於其他服務器上,但是現在它已經被指出給我了。當我通過變量(可以說我將變量定義爲「testCompany」)時,它會直接在E:上創建一個名爲「ftptestCompany」的文件夾?我假設它採用e:\ ftp的ftp部分,並認爲它是名稱的一部分。我會測試在mkdir命令中插入一個額外的\。 – MisterPuggles

+0

我把它變成了e:\ ftp \,它工作的很好! – MisterPuggles

0

我曾經有過這個問題,我的解決辦法是這樣的:

Invoke-Command ServerA {param($Company) "mkdir e:\ftp\$Company\INCOMING"} -ArgumentList $Company -Credential $Credentials 
Invoke-Command ServerA {param($Company) "mkdir e:\ftp\$Company\OUTGOING"} -ArgumentList $Company -Credential $Credentials 

param塊用於將本地值傳遞給正在遠程會話中調用的命令。

在更詳細地解釋在:How to pass arguments for remote commands

使用$args[0]也說明有另一種解決方案。

相關問題