2015-01-16 5 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 {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 블록이 사용됩니다 : 나는 한 번이 문제를 가지고

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

감사합니다. 나는 전체 인수 측면을 자세히 살펴볼 것입니다. 변수가 다른 서버에 존재하지 않는다는 것을 알지 못했지만 이제는 나에게 지적되었습니다. 변수를 전달할 때 ("testCompany"라는 변수를 정의한다고 가정 해 봅시다), "ftptestCompany"라는 E : 폴더를 직접 만듭니다. 나는 그것이 e : \ ftp의 ftp 부분을 차지하고 있다고 생각하고 그것이 이름의 일부라고 생각한다. mkdir 명령에 여분의 \를 삽입하여 테스트 해 보겠습니다. – MisterPuggles

+0

나는 그것을 e : \ ftp \로 바꿨다. – MisterPuggles

0

을 내 솔루션은 무엇인가 같았다 원격 세션에서 호출되는 명령에 로컬 값을 전달합니다. How to pass arguments for remote commands

도 설명 $args[0]를 이용한 다른 해결책 :

을보다 상세히 설명한다.