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

Powershell script that calls a variable inside of a file path?

每当我公司为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 中创建一个传入和传出文件夹。我在这里错过了什么?

也欢迎就如何清理我的脚本提出任何其他建议。这样做我学到了很多东西,但还有很多东西要学。

变量 $company 在另一台服务器的会话中不存在,因此无法使用它来创建您想要的文件夹。

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

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

我曾经遇到过这个问题,我的解决方案是这样的:

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] 的其他解决方案。