在 PowerShell 中连接变量

在 PowerShell 中连接变量

我已经定义了一些 powershell 变量,如下所示

$Host101 = "10.1.1.101"
$Host102 = "10.1.1.102"
$HDD101 = "DataStoreH101"
$HDD102 = "DataStoreH102"
$SSD101 = "DataStoreS101"
$SSD102 = "DataStoreS102"

My-Command -H $Host101 -Disk $HDD101 -Disk $SSD101

现在,我想定义$Node = "101"然后使用以下命令

My-Command -H $Host$Node -Disk $HDD$Node -Disk $SSD$Node

在我测试时Write-Host "$HDD$Node",它没有打印DataStoreH101。我怎样才能在 powershell 中写入类似的东西?

答案1

正如其他人所说,您还必须先定义$Node变量及其值,然后才能使用它。我假设您已经知道这一点,这只是一个疏忽。

我使用过类似的 PowerShell 解决方案来连接变量名称的一部分以设置变量,然后使用以下命令执行完全连接的变量调用表达式

电源外壳

$Host101 = "10.1.1.101";
$Host102 = "10.1.1.102";
$HDD101 = "DataStoreH101";
$HDD102 = "DataStoreH102";
$SSD101 = "DataStoreS101";
$SSD102 = "DataStoreS102";

$Node = "101"; ## Set the node number to concatenate to variable name before invoking it    

$cmd = "Write-Host `"-H `$Host$Node -Disk `$HDD$Node -Disk `$SSD$Node`" -ForegroundColor Green"
Invoke-Expression -Command $cmd

脚本说明

  • 您需要在包含值$中的文字字符的文字变量名的第一部分前面加上反引号 [`] 字符$cmd,这样它仍然是要调用的文字美元符号,并且可以在调用时扩展为完整的连接值。

  • 因为My-Command我曾经使用过Write-Host 因此我必须在其中的双引号前面添加一个反引号前缀,以便在执行时变量$cmd仍然包含那些在调用字符串值时使用的变量——无论您使用此解决方案中的任何命令都要注意这一点。

  • 如果可能的话,您可以使用命令将内部双引号替换为单引号。然后您只需保留外部双引号,而不需要使用反引号字符转义内部单引号。

  • 例如

    $cmd = "Write-Host '-H `$Host$Node -Disk `$HDD$Node -Disk `$SSD$Node' -ForegroundColor Green"
    

输出示例

运行$cmd输出此

Write-Host "-H $Host101 -Disk $HDD101 -Disk $SSD101" -ForegroundColor Green

运行Invoke-Expression -Command $cmd;输出如下(当然是绿色的)

-H 10.1.1.101 -Disk DataStoreH101 -Disk DataStoreS101

带有屏幕截图注释的 PowerShell ISE 输出

在此处输入图片描述

支持资源

相关内容