【问题标题】:Invoke-AzureRmVMRunCommand command displaying wrong output when run in powershell script [duplicate]Invoke-AzureRmVMRunCommand 命令在 powershell 脚本中运行时显示错误的输出 [重复]
【发布时间】:2019-04-02 09:49:39
【问题描述】:

我正在尝试运行以下 powershell 脚本

以下脚本用于列出 VM 中的本地用户


$subscriptions=Get-AzSubscription -SubscriptionId "##################"

foreach ($subscription in $subscriptions){

Select-AzSubscription -SubscriptionId $subscription.SubscriptionId

$instances=Get-AzVM -Status | Select-Object Name,PowerState,ResourceGroupName ,@{l='osType';e={$\_.StorageProfile.osDisk.osType}}

foreach ($instance in $instances){

    Write-Host $instance.Name.Name

    Write-Host $instance.osType

    if($instance.osType -eq "Windows"){

        Write-Host "Windows server"

        if($instance.PowerState -eq "VM running"){
$users=Invoke-AzVMRunCommand -ResourceGroupName $instance.ResourceGroupName -Name $instance.Name -CommandId 'RunPowerShellScript' -ScriptPath 'C:\Users\tushar.raichand\Desktop\sample.ps1'

Write-Host $users

Write-Host "####################################################"

foreach($user in $users){

Write-Host $user

}

        }

    }

    else{

        if($instance.PowerState -eq "running"){
Write-Host "Linux server"

        }



    }

}
}

Sample.ps1 如下


$output = Get-LocalUser

Write-Output $output

$output

我为 Invoke-AzVMRunCommand 得到的输出是


Microsoft.Azure.Commands.Compute.Automation.Models.PSRunCommandResult

当我刚刚在控制台中运行这个命令时


Invoke-AzVMRunCommand -ResourceGroupName $instance.ResourceGroupName -Name $instance.Name -CommandId 'RunPowerShellScript' -ScriptPath 'C:\Users\tushar.raichand\Desktop\sample.ps1'

我正在获取用户列表。

【问题讨论】:

  • 这是第三个关于同一件事的问题,请解释它是如何不是
  • 第一篇文章我已将其改回原始问题,第二篇文章我已将其删除。这是第 3 篇文章,所以现在不再重复了。
  • Write-Host(只为写入display而设计,不能输出data),执行空格分隔,单行基于简单的.ToString() 调用的输出格式,对于复杂的对象通常会导致无用的表示。对于格式丰富的仅显示输出,请改用Out-Host;对于数据,请使用 Write-Output 或者更好的是 PowerShell 的 implicit 输出功能 - 请参阅 this answer

标签: azure powershell


【解决方案1】:

好吧,我可以重现您的问题。问题是Write-Host $users引起的,你需要改成Write-Output $users

示例

$users=Invoke-AzVMRunCommand -ResourceGroupName $instance.ResourceGroupName -Name $instance.Name -CommandId 'RunPowerShellScript' -ScriptPath 'C:\Users\joyw\Desktop\sample.ps1' 
Write-Output $users

另外,你的脚本有一些小错误,e={$\_.StorageProfile.osDisk.osType} 应该是e={$_.StorageProfile.osDisk.osType}Write-Host $instance.Name.Name应该是Write-Host $instance.Name,就够了。

【讨论】:

  • 感谢您的回复...我现在使用“$users=$output.value[0].message”获取值,但我无法访问此表中的值。知道如何做到这一点吗?
  • @TusharRaichand 试试$users.Value.Message,会像i.stack.imgur.com/sMvbZ.png
  • 是的,这是可行的,但如果我想访问此表中的值,我该怎么做。例如,我想访问名称列并打印它们的值。
  • @TusharRaichand 似乎是一个字符串,我的解决方法是将其存储为文件并读取它。
  • 我已经为同一个stackoverflow.com/questions/55489841/…提出了一个问题。
猜你喜欢
  • 2023-03-21
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2019-11-13
  • 2013-06-27
相关资源
最近更新 更多