2017-08-14 4 views
0

asp.netサイトと一緒に動作するPowerShellスクリプトをいくつか作成するように求められました。 しかし、C#と一緒にasp.netサイトは私にとって全く新しい地形です。asp.netサイトのpowershellオブジェクトの値を表示

私は、.ps1スクリプトを実行する方法とテキストボックスに出力を表示する方法を紹介したブログをいくつか見つけました。 これは非常にうまくいっていて、テストスクリプトにパラメータを渡すこともできました。

今、より洗練された「洗練された」UIを得るために出力を少しずつフォーマットしたかったのです。それは私が古いSCCMテストサーバーから$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName "6.6.5.5.4.4"

を引っ張ってる次WmiObjectコマンドの値を表示しています

WPF Form

:私はこのようになりますサピエンスPowerShellのメーカーで迅速かつ汚いWPFフォームを作成しました

2列のレイアウトテーブルです。左側に「静的」テキストのラベルがあり、右側に$ SCCMinfoオブジェクトの実際の値を持つラベルがあります($labelGenusVal.Text = $SCCMinfo.__GENUSなど)

asp.netフォームで同じようにするにはどうすればよいですか?私が見つけることができるのは、1つの要素に完全な出力を表示する方法だけです。

EDIT:

私は私が必要とするすべての値のための私の.ps1で、ライトの出力を望んでいたものを達成することができて、その後aspx.cs.で結果によってインデックス化しています

しかし、これは非常に醜い解決策です。 PowerShellスクリプトから変数とその値を直接取得する方法はありませんか? また、shell.Runspace.SessionStateProxy.PSVariable.GetValue("VarName");shell.Runspace.SessionStateProxy.GetVariable("VarName");を試しましたが、それらは常にnullを返しました。

は、ここに私の現在のソリューションです:

.aspx.cs

using System; 
using System.Management.Automation; 

namespace WPS_Test2 
{ 
    public partial class SCCM_info : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 


     protected void ExecuteCode_Click(object sender, EventArgs e) 
     { 
      // Clean the Result TextBox 
      //ResultBox.Text = string.Empty; 

      // Initialize PowerShell engine 
      var shell = PowerShell.Create(); 

      string pathToWPS = @"C:\Users\sudo\Desktop\WPS_projects\WPS_Test2\WPS_Test2\zzz_wps_scripts\SCCM_info.ps1"; 

      // Add the script to the PowerShell object 
      shell.AddCommand(pathToWPS); 

      // Add some arguments/params 
      shell.AddParameter("sccm_server", SCCM_server.Text); 


      // Execute the script 
      var results = shell.Invoke(); 


      LabelSelectedSCCMsrv.Text = "selected SCCM server: " + SCCM_server.Text; 

      var SCCMiGenus = results[0].ToString(); 
       labelGenusVal.Text = SCCMiGenus; 

      var SCCMiClass = results[1].ToString(); 
       labelClassVal.Text = SCCMiClass; 

      var SCCMiSuperclass = results[2].ToString(); 
       labelSuperclassVal.Text = SCCMiSuperclass; 

      var SCCMiDynasty = results[3].ToString(); 
       labelDynastyVal.Text = SCCMiDynasty; 

      var SCCMiRelpath= results[4].ToString(); 
       labelRelpathVal.Text = SCCMiRelpath; 

      var SCCMiPropertyCount = results[5].ToString(); 
       labelPropertyCountVal.Text = SCCMiPropertyCount; 

      var SCCMiDerivation = results[6].ToString(); 
       labelDerivationVal.Text = SCCMiDerivation; 

      var SCCMiServer = results[7].ToString(); 
       labelServerVal.Text = SCCMiServer; 

      var SCCMiNamespace = results[8].ToString(); 
       labelNamespaceVal.Text = SCCMiNamespace; 

      var SCCMiPath = results[9].ToString(); 
       labelPathVal.Text = SCCMiPath; 

      var SCCMiMachine = results[10].ToString(); 
       labelMachineVal.Text = SCCMiMachine; 

      var SCCMiNamespacePath = results[11].ToString(); 
       labelNamespacePathVal.Text = SCCMiNamespacePath; 

      var SCCMiProviderForLocalSite = results[12].ToString(); 
       labelProviderForLocalSiteVal.Text = SCCMiProviderForLocalSite; 

      var SCCMiSiteCode = results[13].ToString(); 
       labelSiteCodeVal.Text = SCCMiSiteCode; 

      var SCCMiPSComputerName = results[14].ToString(); 
       labelPSComputerNameVal.Text = SCCMiPSComputerName; 
     } 
    } 
} 

.aspxの

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SCCM_info.aspx.cs" Inherits="WPS_Test2.SCCM_info" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     .auto-style1 { 
      width: 145px; 
     } 
     .auto-style2 { 
      width: 145px; 
      height: 23px; 
     } 
     .auto-style3 { 
      height: 23px; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      SCCM Info</div> 
     <div> 
      <table style="width:100%;"> 
       <tr> 
        <td class="auto-style1">SCCM Server:</td> 
        <td> 
         <asp:TextBox ID="SCCM_server" runat="server" Width="248px"></asp:TextBox> 
         <asp:Button ID="Button1" runat="server" Text="Button" OnClick="ExecuteCode_Click" /> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1">&nbsp;</td> 
        <td> 
         <asp:Label ID="LabelSelectedSCCMsrv" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1">Genus</td> 
        <td> 
         <asp:Label ID="labelGenusVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style2">Class</td> 
        <td class="auto-style3"> 
         <asp:Label ID="labelClassVal" runat="server"></asp:Label> 
        </td> 
        <td class="auto-style3"></td> 
       </tr> 
       <tr> 
        <td class="auto-style1">Superclass</td> 
        <td> 
         <asp:Label ID="labelSuperclassVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label13" runat="server" Text="Dynasty"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelDynastyVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style2"> 
         <asp:Label ID="Label14" runat="server" Text="Relpath"></asp:Label> 
        </td> 
        <td class="auto-style3"> 
         <asp:Label ID="labelRelpathVal" runat="server"></asp:Label> 
        </td> 
        <td class="auto-style3"></td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label15" runat="server" Text="Property Count"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelPropertyCountVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label16" runat="server" Text="Derivation"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelDerivationVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label17" runat="server" Text="Server"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelServerVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label18" runat="server" Text="Namespace"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelNamespaceVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label19" runat="server" Text="Path"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelPathVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label20" runat="server" Text="Machine"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelMachineVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label21" runat="server" Text="Namespace Path"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelNamespacePathVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label22" runat="server" Text="Provider for loca site"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelProviderForLocalSiteVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label23" runat="server" Text="Site Code"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelSiteCodeVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label24" runat="server" Text="PSComputerName"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="labelPSComputerNameVal" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
      </table> 
     </div> 
    </form> 
</body> 
</html> 

.ps1という

param ([string]$sccm_server) 


$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName $sccm_server 

Write-Output $SCCMinfo.__GENUS 
Write-Output $SCCMinfo.__CLASS 
# Superclass is NULL in this example, adding a char to display output 
# Write-Output $SCCMinfo.__SUPERCLASS 
Write-Output "--" 
Write-Output $SCCMinfo.__DYNASTY 
Write-Output $SCCMinfo.__RELPATH 
Write-Output $SCCMinfo.__PROPERTY_COUNT 
# Derivation is {} in this example, adding a char to display output 
# Write-Output $SCCMinfo.__DERIVATION 
Write-Output "--" 
Write-Output $SCCMinfo.__SERVER 
Write-Output $SCCMinfo.__NAMESPACE 
Write-Output $SCCMinfo.__PATH 
Write-Output $SCCMinfo.Machine 
Write-Output $SCCMinfo.NamespacePath 
Write-Output $SCCMinfo.ProviderForLocalSite 
Write-Output $SCCMinfo.SiteCode 
Write-Output $SCCMinfo.PSComputerName 
+0

イムあなたが求めているものをかなり確実ではありません。あなたはどのようにWebサイト上のasp.netフォームにデータを入力するか、aspxフォームを作成するためにpowershellを要求しているのですか? – ArcSet

+0

私はpowershellスクリプト(この場合は '$ SCCMinfo')の結果をasp.netウェブサイトに表示したいと思います。可能であれば、上記のWPFフォームで行ったのと同じ方法です。別名 '$ SCCMinfo'の各値を自分のラベルに表示します。ファズを残して申し訳ありません。あなたがそれらに精通していない場合、物事を説明することは非常に困難です。 – StUffz

+0

既存のASP.net Webサイトまたはpowershellによって生成されたWebサイト? – ArcSet

答えて

0

私はようやく適切な解決策を達成することができました。どのように知っていればそれはとても簡単です。

results.Membersの名前と同じIDをラベルに使用しました。余分なif文を使用してテキストをループし、nullでない場合に適切な値に設定します。 .ps1では私は必要なベクトルを返すだけです(この場合は$SCCMinfo

さらに良い解決策がある場合は、私は提案をすることができます。私はまだ結局学んでいます。

は、ここですべて一緒です:

。PS1

param ([string]$sccm_server) 

$SCCMinfo = Get-WmiObject -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' -ComputerName $sccm_server 

return $SCCMinfo 

.aspx.cs

.aspxの

using System; 
using System.Management.Automation; 
using System.Web.UI.WebControls; 

namespace WPS_Test2 
{ 
    public partial class SCCM_info : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 


     protected void ExecuteCode_Click(object sender, EventArgs e) 
     { 
      // Initialize PowerShell engine 
      var shell = PowerShell.Create(); 

      // Attention: No not use spaces!!! Script may cause problems or wont work at all. 
      string pathToWPS = @"C:\Users\sudo\Desktop\WPS_projects\WPS_Test2\WPS_Test2\zzz_wps_scripts\SCCM_info.ps1"; 

      // Add the script to the PowerShell object 
      shell.AddCommand(pathToWPS); 

      // Add some arguments/params 
      shell.AddParameter("sccm_server", SCCM_server.Text); 

      // Execute the script 
      var results = shell.Invoke(); 

      LabelSelectedSCCMsrv.Text = "selected SCCM server: " + SCCM_server.Text; 

      foreach (var name in results[0].Members) 
      { 
       if (FindControl("lbl" + name.Name) != null) 
       { 
        // Find label with the same name as the current property and display the value 
        // Encode the string in HTML (prevent security issue with 'dangerous' caracters like < > 
        if (name.Value != null) 
        { 
         (FindControl("lbl" + name.Name) as Label).Text = Server.HtmlEncode(name.Value.ToString()); 
        } 
       } 
      } 
     } 
    } 
} 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SCCM_info.aspx.cs" Inherits="WPS_Test2.SCCM_info" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
     .auto-style1 { 
      width: 145px; 
     } 
     .auto-style2 { 
      width: 145px; 
      height: 23px; 
     } 
     .auto-style3 { 
      height: 23px; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      SCCM Info</div> 
     <div> 
      <table style="width:100%;"> 
       <tr> 
        <td class="auto-style1">SCCM Server:</td> 
        <td> 
         <asp:TextBox ID="SCCM_server" runat="server" Width="248px"></asp:TextBox> 
         <asp:Button ID="Button1" runat="server" Text="Button" OnClick="ExecuteCode_Click" /> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1">&nbsp;</td> 
        <td> 
         <asp:Label ID="LabelSelectedSCCMsrv" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1">Genus</td> 
        <td> 
         <asp:Label ID="lbl__GENUS" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style2">Class</td> 
        <td class="auto-style3"> 
         <asp:Label ID="lbl__CLASS" runat="server"></asp:Label> 
        </td> 
        <td class="auto-style3"></td> 
       </tr> 
       <tr> 
        <td class="auto-style1">Superclass</td> 
        <td> 
         <asp:Label ID="lbl__SUPERCLASS" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label13" runat="server" Text="Dynasty"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lbl__DYNASTY" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style2"> 
         <asp:Label ID="Label14" runat="server" Text="Relpath"></asp:Label> 
        </td> 
        <td class="auto-style3"> 
         <asp:Label ID="lbl__RELPATH" runat="server"></asp:Label> 
        </td> 
        <td class="auto-style3"></td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label15" runat="server" Text="Property Count"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lbl__PROPERTY_COUNT" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label16" runat="server" Text="Derivation"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lbl__DERIVATION" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label17" runat="server" Text="Server"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lbl__SERVER" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label18" runat="server" Text="Namespace"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lbl__NAMESPACE" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label19" runat="server" Text="Path"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lbl__PATH" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label20" runat="server" Text="Machine"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lblMachine" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label21" runat="server" Text="Namespace Path"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lblNamespacePath" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style2"> 
         <asp:Label ID="Label22" runat="server" Text="Provider for local site"></asp:Label> 
        </td> 
        <td class="auto-style3"> 
         <asp:Label ID="lblProviderForLocalSite" runat="server"></asp:Label> 
        </td> 
        <td class="auto-style3"></td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label23" runat="server" Text="Site Code"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lblSiteCode" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
       <tr> 
        <td class="auto-style1"> 
         <asp:Label ID="Label24" runat="server" Text="PSComputerName"></asp:Label> 
        </td> 
        <td> 
         <asp:Label ID="lblPSComputerName" runat="server"></asp:Label> 
        </td> 
        <td>&nbsp;</td> 
       </tr> 
      </table> 
     </div> 
    </form> 
</body> 
</html> 
関連する問題