首页 > 解决方案 > .NET Core - 从 Azure Ubuntu VM 下载或读取 Json 文件内容

问题描述

我的 Ubuntu VM 上有一个 node.js 脚本,它在完成执行后会生成一个 Json 文件。到目前为止,我可以使用以下代码从 .NET Core 控制台应用程序(使用 Visual Studio 2019)执行此脚本:

string subscriptionId = "mySubscriptionId";
string clientId = "myclientId";
string tenantId = "myTenantId";
string clientSecret = "myClientSecret";

var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(clientId, clientSecret, tenantId, AzureEnvironment.AzureGlobalCloud);
var azure = Azure.Configure().Authenticate(credentials).WithSubscription(subscriptionId);
var vm = await azure.VirtualMachines.GetByResourceGroupAsync("MyAzureRg", "MyUbuntuVm");

string cmd1 = "#!/bin/bash";
string cmd2 = "cd /home/Username/myapp/";
string cmd3 = "xvfb-run nodejs myNodeScript.js";

List<string> commands = new List<string>{cmd1,cmd2,cmd3};

Console.WriteLine("Executing shell script");

await vm.RunShellScriptAsync(commands, null);

Console.WriteLine("Script executed!");

然后我使用 PuTTY 和 SSH 连接到 Ubuntu VM,并且可以确认 Json 已在路径/home/Username/myapp/中正确创建。但是,我的问题是如何将其中的内容取回(读取或下载)到 .NET Core 应用程序?

标签: c#azureubuntu.net-corevirtual-machine

解决方案


在这种情况下获取 json 文件值的最简单方法应该是RunShellScriptAsync()再次使用,请尝试以下代码:

List<string> commands = new List<string> { "cat <your json file path>" };

var result = vm.RunShellScriptAsync(commands, null).GetAwaiter().GetResult();

var message = result.Value[0].Message;

Console.WriteLine(result.Value[0].DisplayStatus);

var stdout = message.Substring(message.IndexOf("[stdout]") + 9).Replace("[stderr]","").Trim();

Console.WriteLine(stdout);

我这边的结果:

在此处输入图像描述

希望能帮助到你 。


推荐阅读