在VM中使用Invoke-AzVMRunCommand运行脚本吗?传递参数问题 [英] Run script using Invoke-AzVMRunCommand in VM? Passing parameter problem

查看:81
本文介绍了在VM中使用Invoke-AzVMRunCommand运行脚本吗?传递参数问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题描述:当您将参数创建为对象并传递给VM-Windows-PS时,一切都很好,您可以使用name = value,但是在linux VM上不是这样,您只会得到值的顺序未知.

Problem description: When you create parameters as object and pass to VM-Windows-PS all is good you can have name=value, but on linux VM that is not the case, you get only values in unknown order.

准备工作

  • 来源:您的PC:Windows:在Powershell中登录Azure.
  • 目标:Azure:拥有Linux VM,就我而言是ubuntu18.

代码:

echo '#!/bin/bash' >>.\msgtst.sh
echo 'echo test: $1 $2 $3 $4 $5 $6' >>.\msgtst.sh
$Script_paramz = @{"lgs" = "SARB"; "Event"="a1001"; "LogName"="xSystem" }
Invoke-AzVMRunCommand -ResourceGroupName VMResourceGroup -VMName LinuxVMName -ScriptPath ".\msgtst.sh" -CommandId RunShellScript -Parameter $Script_paramz -Verbose

尝试:

$Script_paramz = @{"lgs" = "ARB"; "Event"="1001"; "LogName"="System" }

[标准输出]测试:ARB系统1001

[stdout] test: ARB System 1001

$Script_paramz = @{"lgs" = "SARB"; "Event"="a1001"; "LogName"="xSystem" }

[标准输出]测试:SARB xSystem a1001

[stdout] test: SARB xSystem a1001

$Script_paramz = @{"lgs" = "1SARB"; "Event"="C1001"; "LogName"="bSystem" }

[标准输出]测试:1SARB bSystem C1001

[stdout] test: 1SARB bSystem C1001

$Script_paramz = @{"par1" = "val1"; "par2"="val2"; "par3"="val3"; "par4"="val4"; "par5"="val5"; "par6"="val6" }

[标准输出]测试:val3 val6 val1 val2 val4 val5

[stdout] test: val3 val6 val1 val2 val4 val5

Powershell输出:$ Script_paramz

Name                           Value
----                           -----
par3                           val3
par6                           val6
par1                           val1
par2                           val2
par4                           val4
par5                           val5

有人对此有解决方案吗?

回答我如何解决此问题,仍然想知道是否有可能正确看到参数名称.

answer how i solved this, still would like to know if there is possibility to see parameter names correctly.

$ Script_paramz = @ {"par1" ="par1 = val1";"par2" ="par2 = val2";"par3" ="par3 = val3"}

$Script_paramz = @{"par1" = "par1=val1"; "par2"="par2=val2"; "par3"="par3=val3"}

#!/bin/bash
par2=''; par1=''; par3='';
for var in "$@"
do
   IFS='=' read -r -a array <<< "$var"
   export "${array[0]}"="${array[1]}"
done
echo $par1, $par2, $par3

[stdout] val1,val2,val3

[stdout] val1, val2, val3

推荐答案

$ Script_paramz 是哈希表.默认情况下,HashTable实现中不保留顺序.您可以尝试的一种方法是使用 PowerShell HashTable .

$Script_paramz is a HashTable. Order is not kept by default in HashTable implementation. One approach you can try is to use OrderedDictionary from Powershell HashTable.

$Script_paramz = [ordered]@{"par1" = "val1"; "par2"="val2"; "par3"="val3"; "par4"="val4"; "par5"="val5"; "par6"="val6" }

因此,PowerShell中的结果将是:

So the result in powershell will be:

PS C:\Users\fielu> echo $Script_paramz 

Name                           Value
----                           -----
par1                           val1
par2                           val2
par3                           val3
par4                           val4
par5                           val5
par6                           val6

这篇关于在VM中使用Invoke-AzVMRunCommand运行脚本吗?传递参数问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆