zoukankan      html  css  js  c++  java
  • scvmm sdk之powershell(一)

    shell表示计算机操作系统中的壳层,与之相对的是内核,内核不能与用户直接交互,而是通过shell为用户提供操作界面,shell分为两类,一种提供命令行界面,一种提供图形界面。windows powershell第一个版本是在2006年,提供类似unix系统的命令行壳程程序。powershell是建立在.net framework基础之上的,它内置一百多种cmdlet工具,它不仅可以像传统cmd命令一样管理操作系统,还可以管理针对.net架构下开发的程序,比如system center virtual machine manager内置powershell。

    下面我们来敲入两条命令,第一个获取当前系统时间,第二个获取windows以p开头的进程,第三个字母大小写转换。

    1

    我们还以用工具集来连接远程计算机。第一个行获取远程计算机登录权限,第二步来检查该计算机sql server服务是否启动。

    1 $c=get-credential (get-credential -credential domainadministrator)
    2 Get-WmiObject -Query "select * from win32_service where name='mssqlserver'" -computername 192.168.0.181 -credential $c

    2

    那么如何用powershell来管理scvmm,这里需要导入scvmm管理模块。可以用get-vm来获取hyperv中某一台名为linux的虚机。

    更多的命令工具可以调用get-command来查看。

    1 add-pssnapin "Microsoft.SystemCenter.VirtualMachineManager"
    2 get-vm -name linux -vmmserver 192.168.0.223

    3

    那么如果用代码去实现就需要用到System.Management.Automation.dll工具包。

    可以在scvmm安装目录中找到或者C:Program Files (x86)Reference AssembliesMicrosoftWindowsPowerShell类似路径下找到该程序集。

    我们用它写一段代码。如果调用scvmm组件,可以将其用wcf部署在同一环境中,否则找不到依赖的组件。

     1 public List<object> InvokeCmdByParamsWithReturn(string command, Dictionary<string, object> parameters, string module)
     2 {
     3     if (string.IsNullOrEmpty(command)) return null;
     4 
     5     List<object> returnValue = new List<object>();
     6     try
     7     {
     8         if (conn != null && conn.IsConnected)
     9         {
    10             System.Management.Automation.Runspaces.PSSnapInException warning;
    11             System.Management.Automation.Runspaces.RunspaceConfiguration config = System.Management.Automation.Runspaces.RunspaceConfiguration.Create();
    12             if (!string.IsNullOrEmpty(module))
    13                 config.AddPSSnapIn(module, out warning);
    14             System.Management.Automation.Runspaces.Runspace run = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(config);
    15             run.Open();
    16             using (System.Management.Automation.Runspaces.Pipeline pipeLine = run.CreatePipeline())
    17             {
    18                 System.Management.Automation.Runspaces.Command cmd = new System.Management.Automation.Runspaces.Command(command);
    19                 if ((parameters != null || parameters.Count > 0))
    20                 {
    21                     foreach (var p in parameters)
    22                     {
    23                         cmd.Parameters.Add(p.Key, p.Value);
    24                     }
    25                 }
    26                 pipeLine.Commands.Add(cmd);
    27                 var result = pipeLine.Invoke();
    28                 if (result != null && result.Count > 0)
    29                 {
    30                     foreach (var obj in result)
    31                     {
    32                         StringBuilder sb = new StringBuilder();
    33                         foreach (var item in obj.Members)
    34                         {
    35                             if (item.MemberType == System.Management.Automation.PSMemberTypes.Property)
    36                                 sb.Append(string.Format("{0}:{1},", item.Name, item.Value));
    37                         }
    38                         returnValue.Add(sb.ToString().Remove(sb.Length - 1, 1));
    39                     }
    40                     return returnValue;
    41                 }
    42             }
    43             run.Close();
    44         }
    45         return null;
    46     }
    47     catch (Exception ex)
    48     {
    49         return null;
    50         throw new HostingManagementException(ex.Message, ex);
    51     }
    52 }

    下面我们在客户端来调用它。第一个是获取bios环境信息,第二个我们来获取主机相关信息。

     1 protected void Page_Load(object sender, EventArgs e)
     2 {
     3     ServiceReference1.VirtualMachineManagementServiceClient client = new ServiceReference1.VirtualMachineManagementServiceClient();
     4     client.Connect("192.168.0.223", 8100, "hf01\administrator", "P@ssw0rd110");
     5 
     6     Dictionary<string, object> args = new Dictionary<string, object>();
     7     args.Add("class", "Win32_BIOS");
     8     var query = client.InvokeCmdByParamsWithReturn("Get-WmiObject", args, "");
     9 
    10     args = new Dictionary<string, object>();
    11     args.Add("vmmserver", "192.168.0.223");
    12     var query2 = client.InvokeCmdByParamsWithReturn("get-vmhost", args, "Microsoft.SystemCenter.VirtualMachineManager");
    13 
    14     client.Disconnect();
    15     client.Close();
    16 }

    运行结果。

    4

  • 相关阅读:
    PeerJS
    OpenEMM 2013 发布,电子邮件营销软件
    feh 2.9 发布,图像查看器
    PyPyODBC 0.9.2发布 纯Python实现的pyodbc替代库
    MariaDB 5.5.29, 5.3.12, 5.2.14, 5.1.67
    CouchDB 1.3.0的新特性以及算法的强化
    Boost 1.53.0 发布,可移植的C++标准库
    ActiveMQ 5.8.0 发布,JMS 消息服务器
    MySQL 5.5.30 发布
    CloverETL Designer 3.3.1 发布
  • 原文地址:https://www.cnblogs.com/yuefei/p/3927345.html
Copyright © 2011-2022 走看看