每当为我公司的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中创建一个传入和传出文件夹。我在这里缺少什么?
欢迎任何有关如何清理脚本的其他建议。我学到了很多东西,但还有很多东西可以学习。
答案 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]
的其他解决方案。