在文件路径中调用变量的Powershell脚本?

时间:2015-01-16 14:53:08

标签: powershell ftp directory mkdir invoke-command

每当为我公司的FTP客户端创建FTP文件夹时,我必须在两台服务器上创建两个文件夹;服务器A和服务器B.我试着在下面给出一个例子。

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中创建一个传入和传出文件夹。我在这里缺少什么?

欢迎任何有关如何清理脚本的其他建议。我学到了很多东西,但还有很多东西可以学习。

2 个答案:

答案 0 :(得分:1)

变量$company在另一台服务器上的会话中不存在,因此无法用于创建所需的文件夹。

您可以使用-Argumentlist Invoke-Command参数传递变量,如下所示:

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

答案 1 :(得分: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]的其他解决方案。