我已经定义了一些 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